3

我正在尝试从 Java 中的字符串中查找所有三个字母的子字符串。

例如,从字符串“example string”我应该得到“exa”、“xam”、“amp”、“mpl”、“ple”、“str”、“tri”、“rin”、“ing”。

我尝试使用 Java 正则表达式“([a-zA-Z]){3}”,但我只得到了“exa”、“mpl”、“str”、“ing”。

有人可以告诉我一个正则表达式或方法来纠正这个问题。

4

4 回答 4

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); }
}
于 2013-08-29T03:20:58.200 回答
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 
于 2013-08-29T03:12:51.590 回答
3

当一个字符在一个正则表达式中使用时,它不能在其他正则表达式中使用。在您的示例中,aexa中使用,因此amp不会被列为输出。您应该尝试传统的迭代方法。它更容易实现。

于 2013-08-29T02:50:22.263 回答
1

这可以使用正则表达式完成,如下所示:

  1. 使用 regex 查找字符串的所有匹配项的位置\w(?=\w\w)。这将为您提供每个所需子字符串的第一个字符的起始索引。

    在这种情况下,您会得到:0, 1, 2, 3, 4, 8, 9,1011

  2. 通过从每个位置开始直到加 2 的子字符串来获得你需要的东西。

    在这种情况下,这将意味着,my_string.substring(0,3)等等my_string.substring(1,4),因为开始索引参数是包含的,而结束索引参数是不包含的。

于 2013-08-29T03:20:02.303 回答