您好,我的文字文件构建如下:
1 name1 _ opt1 _ no1 _ no2
3 name2 _ opt2 _ no3 _ no4
2 name3 _ opt3 _ no5 _ no6
我必须从每一行中选择nameX和optX。文本是在第一列和第二列之间分隔的选项卡,在其他列之间还有两个选项卡分隔符之间的_。
我可以选择"X nameX _ optX"
,但我也不想在nameX之前选择数字和标签除数。我使用的正则表达式是:"\\.*\t_\t\\.*"
这里是java代码:
ArrayList<ArrayList<String>> listDic = new ArrayList<ArrayList<String>>();
BufferedReader reader = new BufferedReader(new FileReader(filename));
int countLine = 0;
while (true) {
String line = reader.readLine();
if (line == null) {
reader.close();
break;
} else {
Scanner s = new Scanner(line).useDelimiter("\\.*\t_\t\\.*");
listDic.add(new ArrayList<String>());
listDic.get(countLine).add(0, s.next());
System.out.println(listDic.get(countLine).get(i));
// System.out.println(listDic.get(i));
listDic.add(new ArrayList<String>());
listDic.get(countLine).add(1, s.next());
System.out.println(listDic.get(countLine).get(i));
// System.out.println(listDic.get(countLine));
countLine++;
}
}
答案 0 :(得分:1)
也许你正在寻找:
String[] tokens = line.split("\t_\t");
例如:
String string = "2\tname3\t_\topt3\t_\tno5\t_\tno6";
System.out.println(Arrays.toString(string.split("\t_\t")));
产生
[2 name3, opt3, no5, no6]
如果您想按标签或 "\t_\t"
进行拆分,可以使用"[\t_]+"
作为拆分。
答案 1 :(得分:0)
一些事情:
ArrayList
两次。next()
即可跳过扫描仪读取的第一个令牌。i
未定义;我想这个代码是使用循环从某个地方剪切/粘贴的。也许这样的事情适合你:
ArrayList<ArrayList<String>> listDic = new ArrayList<ArrayList<String>>();
BufferedReader reader = new BufferedReader(new FileReader(filename));
for (int countLine = 0;; countLine++) {
String line = reader.readLine();
if (line == null) {
reader.close();
break;
}
Scanner s = new Scanner(line);
s.useDelimiter("\t(_\t)?");
ArrayList<String> tokens = new ArrayList<String>();
s.next(); // Skip the first token
tokens.add(s.next()); // Take the second token (name)
tokens.add(s.next()); // Take the third token (opt)
listDic.add(tokens);
System.out.println(listDic.get(countLine).get(0));
System.out.println(listDic.get(countLine).get(1));
}