2

我有 3 个具有类似格式的向量,如下所示..

矢量1:

start:231 stop:234 name:xyz 
start:331 stop:334 name:abc
start:431 stop:434 name:fds

Vector2 和vector3 也具有相同的格式。我必须迭代 3 个向量并拆分内容并分配给字符串或整数。

我做了以下事情:

public static  Tokens getTokens( Vector<NameBuffer> vc1 ) {
    Tokens tokens=new Tokens();
    Iterator it1=vc1.iterator();
    while(it1.hasNext())
    {
    String onerecord=  it1.next().toString();
    StringTokenizer stringTokenizer = new StringTokenizer(onerecord);
    while (stringTokenizer.hasMoreElements()) {

        String tmp = stringTokenizer.nextToken();
        if ( tmp.startsWith("start=")) {
            tmp = tmp.substring("start=".length());
            try {
                int begin = Integer.parseInt(tmp);
                tokens.setbegin(begin);
            }
            catch ( NumberFormatException nfe ) {
                nfe.printStackTrace();
            }
        }
        else {
            System.err.println("Wrong format");
        } 
        String tmp1 = stringTokenizer.nextToken();
        if ( tmp1.startsWith("stop=")) {
            tmp1 = tmp1.substring("stop=".length());
            try {
                int end = Integer.parseInt(tmp1);
                tokens.setend(end);
                //System.out.println(end);
            }
            catch ( NumberFormatException nfe ) {
                nfe.printStackTrace();
            }
        }
        else {
            System.err.println("Wrong format");
        } 
                    String tmp2 = stringTokenizer.nextToken();
        if ( tmp2.startsWith("name=")) {
            tmp2 = tmp2.substring("name=".length());

                String name = tmp2;
                tokens.setname(name);

            }

        }
        else {
            System.err.println("Wrong format");
        } 
    }//while(stringtokenizer.hasmoreElements

    System.out.println(tokens);// At this point i was able to print all records

}//while(it1.hasNext()

    return tokens; //Is the problem with this return?

}//getTokens

注意:Tokens 是一个简单的 Java 类,具有 setstart() 和 gerstart() 等 setter 和 getter

在主要方法中

public static void main(String[] args) {

      Tokens fnTokens=getTokens(vector1);
      for(i=0;i<firstname.size();i++)
      {
      System.out.println(fnTokens);// it is printing only last record in my vector
      }

}

如果我在getTokens方法本身中打印,我可以获得所有记录,但这里只有最后一条记录。

我的最终意图是迭代所有 3 个向量并比较 vector1.getstart()、vector1.getend() 和 vector1.getname() vector2.getstart()、vector2.getend() 和 vector2.getname() 等元素 vector3.getstart (),vector3.getend() 和 vector3.getname()

有人可以帮我解决这个问题吗?

4

2 回答 2

1

您不断覆盖Tokens您拥有的单个实例......在您的原始代码中:

Tokens tokens=new Tokens();//create Tokens instance
while(it1.hasNext())
{
  // init
  while (stringTokenizer.hasMoreElements()) {
   // set tokens fields
  }
  System.out.println(tokens);// You print the current Tokens instance

}//while(it1.hasNext()
return tokens; //only return one, at the last state.

在循环中,您总是打印实例的当前状态,但只返回最后一个Tokens

要解决此问题,请稍微更改方法以返回所有实例,例如在 List 中:

public static  List<Tokens> getTokens( Vector<NameBuffer> vc1 ) {

  List<Tokens> tokenList=new ArrayList<Tokens>();//create Tokens list to return
  while(it1.hasNext())
  {
    // init
    Tokens tokens=new Tokens();//create Tokens instance inside loop
    tokenList.add(tokens); //add to list to return 

    while (stringTokenizer.hasMoreElements()) {
     // set tokens fields -- unchanged
    }
    System.out.println(tokens);// You print the current Tokens instance

  }//while(it1.hasNext()
  return tokenList; //only return the last one....
}

然后在 main 方法中:

public static void main(String[] args) {
  //...

  List<Tokens> fnTokens=getTokens(vector1);
  for(Tokens t: fnTokens)
  {
    System.out.println(t);      
  }
}
于 2013-10-08T12:04:03.047 回答
0
public static  Tokens getTokens( Vector<NameBuffer> vc1 ) {
   Iterator it1=vc1.iterator();
   while(it1.hasNext()) {
       String onerecord=  it1.next().toString();
      //String onerecord="start:231 stop:234 name:xyz";
       String ss[]=onerecord.split(":|\\s");
       System.out.println(ss[0]+" = "+ss[1]);
       System.out.println(ss[2]+" = "+ss[3]);
       System.out.println(ss[4]+" = "+ss[5]); 
   }
}
于 2013-10-08T12:04:18.097 回答