2013-10-08 35 views
2

我有3個矢量使用如下所示相似的格式..迭代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 

注:

我有一個像下面做記號是一個簡單的Java類的setter和像setstart干將()和gerstart()

在main方法

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方法本身,我能夠獲得所有記錄,但這裏只有最後一條記錄。 (),vector1.getend()和vector1.getname() vector2.getstart(),vector2.getend()和vector2.getname()創建一個對象, () vector3.getstart(),vector3.getend()和vector3.getname()

有人能幫我解決這個問題嗎?

回答

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實例的當前狀態,但只有返回last

要解決,改變了一下週圍該方法返回的所有實例,例如在一個列表:

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);  
    } 
} 
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]); 
    } 
}