Java 迭代3个向量拆分内容并分配

Java 迭代3个向量拆分内容并分配,java,Java,我有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=n

我有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
公共静态令牌getTokens(向量vc1){
代币代币=新代币();
迭代器it1=vc1.Iterator();
while(it1.hasNext())
{
字符串onerecord=it1.next().toString();
StringTokenizer StringTokenizer=新的StringTokenizer(onerecord);
while(stringTokenizer.hasMoreElements()){
字符串tmp=stringTokenizer.nextToken();
if(tmp.startsWith(“start=)){
tmp=tmp.substring(“start=“.length());
试一试{
int begin=Integer.parseInt(tmp);
tokens.setbegin(begin);
}
捕获(NumberFormatException nfe){
nfe.printStackTrace();
}
}
否则{
System.err.println(“格式错误”);
} 
字符串tmp1=stringTokenizer.nextToken();
if(tmp1.startsWith(“stop=)){
tmp1=tmp1.substring(“stop=”.length());
试一试{
int end=Integer.parseInt(tmp1);
tokens.setend(end);
//系统输出打印项次(结束);
}
捕获(NumberFormatException nfe){
nfe.printStackTrace();
}
}
否则{
System.err.println(“格式错误”);
} 
字符串tmp2=stringTokenizer.nextToken();
if(tmp2.startsWith(“name=)){
tmp2=tmp2.substring(“name=“.length());
字符串名称=tmp2;
tokens.setname(name);
}
}
否则{
System.err.println(“格式错误”);
} 
}//while(stringtokenizer.hasmoreElements)
System.out.println(令牌);//此时我可以打印所有记录
}//while(it1.hasNext()
return tokens;//此返回有问题吗?
}//格托肯斯

注意: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
      }

}
publicstaticvoidmain(字符串[]args){
令牌fnTokens=getTokens(向量1);

对于(i=0;i您一直在覆盖原始代码中的单个
令牌
实例:

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.
在循环中,您总是打印
令牌
实例的当前状态,但只返回最后一个

要解决此问题,请将方法更改一位以返回所有实例,例如在列表中:

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....
}
公共静态列表getTokens(向量vc1){
List tokenList=new ArrayList();//创建要返回的令牌列表
while(it1.hasNext())
{
//初始化
Tokens Tokens=new Tokens();//在循环内创建Tokens实例
tokenList.add(tokens);//添加到列表以返回
while(stringTokenizer.hasMoreElements()){
//设置令牌字段--未更改
}
System.out.println(tokens);//打印当前tokens实例
}//while(it1.hasNext()
return tokenList;//只返回最后一个。。。。
}
然后在主要方法中:

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

  List<Tokens> fnTokens=getTokens(vector1);
  for(Tokens t: fnTokens)
  {
    System.out.println(t);      
  }
}
publicstaticvoidmain(字符串[]args){
//...
列表fnTokens=getTokens(向量1);
for(令牌t:FNS令牌)
{
系统输出打印ln(t);
}
}
公共静态令牌getTokens(向量vc1){
迭代器it1=vc1.Iterator();
while(it1.hasNext()){
字符串onerecord=it1.next().toString();
//String onerecord=“开始:231停止:234名称:xyz”;
字符串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]);
}
}
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]); 
   }
}