Java 迭代3个向量拆分内容并分配
我有3个类似格式的向量,如下所示 矢量1: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
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]);
}
}