我希望在两个单词之间得到所有文本。 例如:
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中使用?
提前致谢
答案 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方法