查找字符串中的所有3个字符长度子字符串

时间:2013-08-29 02:48:54

标签: java regex

我试图从Java中的字符串中找到所有三个字母的子串。

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

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

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

4 个答案:

答案 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)

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

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

    在这种情况下,您会得到:012348,{{1 }},910

  2. 通过从每个位置开始加上2加上子字符串来获得所需的内容。

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