我正在使用Buffered Reader将文件的各行传递给Java的StringTokenizer
。该文件的结构如下:
"2,0";"12345";"foo";"foo.doc"
"2,4";"23456";"foo";"foo.doc";"34567";"foo7";"foo7.doc";"45678";"foo6";"foo6.doc";"56789";"foo5";"foo5.doc";"67890";"foo4";"foo4.doc"
"3,0";"34567";"foo7";"foo7.doc"
"3,0";"45678";"foo6";"foo6.doc"
"3,0";"56789";"foo5";"foo5.doc"
"3,0";"67890";"foo4";"foo4.doc"
这是我正在使用的代码 - 到目前为止。
public class parse {
public static void main(String args[]) {
FileInputStream inputStream = new FileInputStream("whidata0.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while((scrubbedInput=br.readLine())!=null) {
StringTokenizer strTok = new StringTokenizer(scrubbedInput, ";", false);
int tokens = strTok.countTokens();
while (strTok.hasMoreTokens()) {
tok01 = strTok.nextToken();
}
System.out.println(" scrubbed: " + scrubbedInput);
System.out.println(" tokens: " + tokens);
System.out.println(" tok01: " + tok01);
}
}
}
我需要能够将字符串中的每个标记分配给变量以进行其他操作。但是,如果我在while
循环中分配这些变量,迭代将覆盖我的变量,并且它们将返回相同的值。
我正试图设法做以下事情:
String token01 = strTok.tokenNumber(0);
String token02 = strTok.tokenNumber(1);
String token03 = strTok.tokenNumber(2);
String token04 = strTok.tokenNumber(3);
etc.
但是在String Tokenizer文档中找不到允许的任何方法。我当然可以将每一行写成thisLineOfTokens[]
的String数组并使用for循环来创建String tokenN = thisLineOfTokens[n]
,但是有更直接的方式来访问特定的令牌吗?
我很遗憾从我的字符串中引用SPECIFIC令牌的最佳方式。
答案 0 :(得分:3)
您可以使用String.split
代替StringTokenizer
。
String[] split = scrubbedInput.split(";");
split[2]; //index=2
答案 1 :(得分:0)
来自here的信息:
建议所有寻求此功能的人使用String的拆分方法或java.util.regex包。
所以,你可以使用这样的东西:
String testLine = "your;test;data;"
String[] result = testLine.split(";");
for (int x=0; x<result.length; x++){
System.out.println(result[x]);
}
输出:
your
test
data