有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式Java文本过滤器

对于一个项目,我需要开发een Java应用程序来检查多个部分上的字符串:

  1. 首先,检查单词是否包含指定列表中的单词
    请注意:
    • 输入可能包含列表中的一个单词,但字符之间可以有空格或特殊字符以绕过过滤器。在这种情况下,过滤器需要将单词过滤到
    • 这个词可以放在另一个词中。然后,如果指定了before和/或after过滤器,则需要过滤单词
  2. 第二个是过滤包含ip地址的文本
    请注意:
    • 输入可能包含ip,其中使用特殊字符或空格绕过筛选器。在这种情况下,筛选器需要将ip地址筛选到
  3. 第三种方法是从文本中过滤网址
    此外,请注意:
    • 输入可能包含使用特殊字符或空格绕过筛选器的网址。在这种情况下,筛选器需要将web地址筛选到

我测试了一些idea,检查空格和特殊字符,但是处理传入的文本需要花费大量的工作

我尝试过的一个例子:

public static boolean validateBericht(String msg) {
    return validateTransformedBericht(msg);
}

private static boolean validateTransformedBericht(String bericht) {
    if (bericht.length() != 0) {
        for (String woord : ChatControlList.getChatControlList()
                .getWoordenLijst()) {
            for (int i = 0; i < (bericht.length() - (woord.length() - 1)); i++) {
                if (i == 0 || inTekenLijst(bericht.charAt(i))) {
                    int index = 0;
                    for (int j = i; j < bericht.length(); j++) {
                        if (inTekenLijst(bericht.charAt(j))) {
                        } else if (bericht.charAt(j) == woord.charAt(index)) {
                            index++;
                        } else {
                            break;
                        }
                        if (index == woord.length()) {
                            if ((bericht.length() - 1) == j
                                    || inTekenLijst(bericht.charAt(index))) {
                                return true;
                            } else {
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    return false;
}

private static boolean inTekenLijst(char teken) {
    for (String tekenUitLijst : ChatControlList.getChatControlList()
            .getSpecialeTekens()) {
        if (tekenUitLijst.equalsIgnoreCase(String.valueOf(teken))
                || String.valueOf(teken).equalsIgnoreCase(" ")) {
            return true;
        }
    }
    return false;
}

有人知道如何用有效的解决方案来解决这个问题吗

伤害


共 (2) 个答案

  1. # 1 楼答案

    在这种情况下,您应该创建两种方法:

    • 首先测试字符串是否与搜索的单词匹配
    • 第二个测试地址的类型

    然后你可以在代码中随心所欲地使用它们

    1. 检查字符串是否与搜索的单词匹配的代码:

        String line = "the wor ld is wonderful";
        String search = "wor ld";
        String pattern = "(" + search + ")";
      
        Pattern r = Pattern.compile(pattern);
      
        Matcher m = r.matcher(line);
      
        if (m.find()) {
          System.out.println("Found value: " + m.group(0));
        } else {
          System.out.println("NO MATCH");
        }
      
    2. 测试给定地址并判断其是否为IP地址的方法;网址或无效地址:

      public static String testAddress(String address) {
        if (address.matches("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")) {
          return "IP Address";
        } else if (address.matches("^(http\\:\\/\\/|https\\:\\/\\/)?([a-z0-9][a-z0-9\\-]*\\.)+[a-z0-9][a-z0-9\\-]*$")) {
          return "Web address";
        } else {
          return "invalid input";
        }
      }
      

    这是一个Working Ideone Test

  2. # 2 楼答案

    对于第一部分,你可以去掉所有的特殊字符和空格,例如

    testString = origString.replaceAll("[- #$%]", "");    //Extend the regex to add your own special characters
    

    。。。然后搜索单词

    containsWord = testString.toLowerCase().contains(badWord);