我正在尝试从 Java 中的字符串中查找所有三个字母的子字符串。
例如,从字符串“example string”我应该得到“exa”、“xam”、“amp”、“mpl”、“ple”、“str”、“tri”、“rin”、“ing”。
我尝试使用 Java 正则表达式“([a-zA-Z]){3}”,但我只得到了“exa”、“mpl”、“str”、“ing”。
有人可以告诉我一个正则表达式或方法来纠正这个问题。
在某种程度上实现 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); }
}
尝试这个
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
当一个字符在一个正则表达式中使用时,它不能在其他正则表达式中使用。在您的示例中,a在exa中使用,因此amp不会被列为输出。您应该尝试传统的迭代方法。它更容易实现。
这可以使用正则表达式完成,如下所示:
使用 regex 查找字符串的所有匹配项的位置\w(?=\w\w)
。这将为您提供每个所需子字符串的第一个字符的起始索引。
在这种情况下,您会得到:0
, 1
, 2
, 3
, 4
, 8
, 9
,10
和11
。
通过从每个位置开始直到加 2 的子字符串来获得你需要的东西。
在这种情况下,这将意味着,my_string.substring(0,3)
等等my_string.substring(1,4)
,因为开始索引参数是包含的,而结束索引参数是不包含的。