2013-10-11 107 views
-1

我正在设计一个程序,其中用户输入具有三个特定模式的字符串"has""has"之间的字符可以更改。例如,用户可以输入字符串,如"iihasiiaahasiihas""iihasiaaahasiaaahas"分隔字符串模式的子字符串

我使用这个代码到包含"has"子:

int va= sr.indexOf("has"); 
    int va2=sr.lastIndexOf("has"); 
    String s1=sr.substring(va, va2+3); 

但我的问题是,如果用户输入字符串包含一个或两个"has"它也将独立子。

我想要那个包含三个"has"的子字符串,我不能使用比较方法,因为我不知道用户将在三个"has"之间输入的字符。所以任何人都可以给我建议,我该怎么办?

输出应该是这样的:

"hasiiaahasiihas"string1"hasiaaahasiaaahas"另一个string

在三个字符之间"has"可以改变。

回答

4

使用正则表达式: "has.*?has.*?has"

Pattern p = Pattern.compile("has.*?has.*?has"); 
Matcher m = p.matcher(inputString); 
while(m.find()) { 
    System.out.println(m.group()); 
} 
+0

这似乎更像Sarah实际上想要做的事情。 – sage88

+0

我打算说使用var n = str.match(/has.+has.+has/); Upvoted your answer – WindsorAndy

+0

@WindsorAndy有一点需要注意:你所建议的正则表达式使用的是一个贪婪的量词+而不是不情愿的量词'+?'。 对于一个字符串'“hasxhasxhasxhas”',你的正则表达式'。+ has。+ has'会匹配整个字符串,但是我的匹配是前3个has。换句话说,如果没有不情愿的量词,你会得到最长的匹配。 –

1

使用分割法来分割每个单词,并获得通过关键字分隔的单词的阵列“拥有”:

sr.split("has") 
+1

我不认为你重新理解她想做什么。她想要作为开始和结束标签,但不能在中间拾取有值。 – sage88

+0

这是一个正则表达式问题。有了分割,你还剩下需要进一步处理的结果,甚至可以检查它们是否是有效命中 – WindsorAndy