你好StackOverFlow的人。
事实上我需要帮助来解决一个我认为在java中要解决的相当容易的问题。
我有一份40 000行文字,看起来像这样。
<syn level="3.3"><w1>wordOne</w1><w2>WordTwo</w2></syn>
<syn level="4.3"><w1>WordThree</w1><w2>WordFour</w2></syn>
<syn level="3.3"><w1>wordFive</w1><w2>WordSix</w2></syn>
等等等等。我想要做的是取出左侧的单词并将它们全部放入一个数组中,同样适用于右侧。
我想出了一个看起来像这样的解决方案。
for(int i = 0; i < lines.size();i++){
int iEnd = lines.get(i).indexOf('€');
firstWord.add(lines.get(i).substring(21, iEnd));
}
<syn level="3.3"><w1>wordOne€</w1><w2>WordTwo</w2></syn>
然而,这会迫使我坐下来写下8万个'',而且感觉必须有一个更好的方法。
答案 0 :(得分:0)
为什么不使用这样的正则表达式:
<w1>(\w+)<\/w1><w2>(\w+)<\/w2>
首先创建一个Pattern
Pattern c = Pattern.compile("<w1>(\\w+)<\\/w1><w2>(\\w+)<\\/w2>");
然后为每一行运行一个匹配器
Matcher m = c.matcher(line);
while (m.find()) {
System.out.println(m.group(1) );
System.out.println(m.group(2) );
}
答案 1 :(得分:0)
为什么要手动添加'€'来标记单词的结尾?您已经知道该单词以</w1>
所以你可以写这样的东西
int iEnd = lines.get(i).indexOf("</w1>");
保留其余的代码,它应该没问题。