我试图从Java中的字符串中找到所有三个字母的子串。
例如,从字符串“example string”我应该得到“exa”,“xam”,“amp”,“mpl”,“ple”,“str”,“tri”,“rin”,“ing”
我尝试使用Java正则表达式“([a-zA-Z]){3}”但我只得到“exa”,“mpl”,“str”,“ing”。
有人可以告诉我一个正则表达式或方法来纠正这个问题。
答案 0 :(得分:8)
实施Juvanis'想法有点,迭代得到你的子串,然后使用正则表达式,以确保子串是所有字母:
String s = "example string";
for (int i = 0; i <= s.length() - 3; i++) {
String substr = s.substring(i, i + 3);
if (substr.matches("[a-zA-Z]+")) { System.out.println(substr); }
}
答案 1 :(得分:3)
在一个正则表达式中使用某个字符时,不能在其他正则表达式中使用它。在您的示例中,一个在 exa 中使用,因此 amp 将不会列为输出。你应该尝试传统的迭代方法。它更容易实现。
答案 2 :(得分:3)
试试这个
Matcher m = Pattern.compile("([a-zA-Z]){3}").matcher("example string");
for (int i = 0; m.find(i); i = m.start() + 1) {
System.out.print(m.group() + " ");
}
输出
exa xam amp mpl ple str tri rin ing
答案 3 :(得分:1)
这可以使用正则表达式完成,如下所示:
使用正则表达式\w(?=\w\w)
查找字符串的所有匹配项的位置。这将为您提供每个所需子字符串的第一个字符的起始索引。
在这种情况下,您会得到:0
,1
,2
,3
,4
,8
,{{1 }},9
和10
。
通过从每个位置开始加上2加上子字符串来获得所需的内容。
在这种情况下,这意味着11
,my_string.substring(0,3)
等等,因为开始索引参数是包含性的,而结束索引参数是独占的。