使用正则表达式/字符串方法:打印包含Pattern的单词

时间:2016-03-01 08:23:16

标签: java regex string

我有一个字符串和一个模式

myString = "thiS is testing my patience with regexIs";
pattern = "is";

我想遍历myString并打印包含该模式的每个单词。我的梦想输出(不敏感到案例)将是

"thiS is regexIs"

我知道我会遍历myString的长度,但我无法想到在这种情况下有意义的任何字符串方法。我曾经计算过之前的事件(使用像charAt(i),match,contains,replaceAll这样的东西),并且在我的前两周找到了模式,索引位置,特殊字符,数字等等。真正的String方法用法,但到目前为止我学到的东西我不能拼凑起来弄清楚这个难题。

3 个答案:

答案 0 :(得分:3)

以下方法findMatches()会在输入句子中返回List个匹配词。您可以使用它来获取匹配项,然后将它们打印到您需要的位置。

List<String> findMatches(String input, String pattern) {
    String[] parts = input.split(" ");
    List<String> words = new ArrayList<String>();

    for (String part : parts) {
        if (part.toLowerCase().contains(pattern.toLowerCase())) {
            words.add(part);
        }
    }

    return words;
}

<强>用法:

String myString = "thiS is testing my patience with regexIs";
String pattern = "is";

List<String> matches = findMatches(myString, pattern);

for (String match : matches) {
    System.out.println(match + " ");
}

答案 1 :(得分:2)

您可以拆分字符串以获取数组中的单词。循环数组并将它们与您的模式进行比较。

String myString = "thiS is testing my patience with regexIs";
String[] arr = myString.split(" ");
for (String string : arr) {
    if (string.toLowerCase().contains("is")) {
        System.out.print(string+ " ");
    }
}

答案 2 :(得分:1)

根本不需要循环。

String s = "thiS is testing my patience with regexIs";
System.out.println(s.replaceAll("(?i)\\b((?!is).)+\\b", " "));