在Java中的两个单词之间查找文本

时间:2010-01-01 10:51:43

标签: search text

我希望在两个单词之间得到所有文本。 例如:

String Testing="one i am here fine two one hope your are also fine two one ok see you two";

从上面的字符串中,我想获取数组中“one”和“two”之间的单词:

我的结果应该像这样存储在数组中:

String result[1] = i am here fine
String result[2] = hope your are also fine  
String result[3] = ok see you

如何在java中使用?

提前致谢

  • Gnaniyar Zubair

4 个答案:

答案 0 :(得分:7)

String input = "one i am here fine two one hope your are also fine two one ok see you two;";
Pattern p = Pattern.compile("(?<=\\bone\\b).*?(?=\\btwo\\b)");
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<String>();
while (m.find()) {
  matches.add(m.group());
}

这将创建“one”和“two”之间所有文本的List。

如果你想要一个不使用lookaheads / lookbehinds的简单版本,试试:

String input = "one i am here fine two one hope your are also fine two one ok see you two;";
Pattern p = Pattern.compile("(\\bone\\b)(.*?)(\\btwo\\b)");
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<String>();
while (m.find()) {
  matches.add(m.group(2));
}

注意: Java数组从零开始,而不是基于一个,所以在您的示例中,第一个结果是result[0]而不是result[1]。在我的解决方案中,第一场比赛是matches.get(0)

答案 1 :(得分:2)

最简单的方法(为Groovy shell编写),减去任何错误处理:

init

答案 2 :(得分:1)

查看Java Pattern类,它允许您使用正则表达式来识别子字符串,从而拆分更大的字符串。你需要像

这样的东西
Pattern.compile("\bone\B");

识别'一个'。 \b\B是字边界匹配。你需要这些,所以你不要意外地匹配“某人”而不是单词“one”(另外,我建议使用不同的分隔符而不是单词“one”,“two”等。)

答案 3 :(得分:0)

只需使用indexOf和subString方法