从一个字符串到另一个字符串的子字符串

时间:2017-03-26 22:09:40

标签: java database string substring

你好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万个'',而且感觉必须有一个更好的方法。

2 个答案:

答案 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>");

保留其余的代码,它应该没问题。