Java 如何用正则表达式扫描特定字符串?

Java 如何用正则表达式扫描特定字符串?,java,string,Java,String,我有一个字符串,我想检查它是否包含一些特定的字符。如果包含此字符,则必须出现错误消息 我有一个想法并计划使用“模式”和“匹配器”类: 现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数“sourceToScan”)。正则表达式必须是经过筛选的符号,如[]/{}%$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ 如何在示例中实现此解决方案?使用,此处不需要正则表达式: String[] mySpecialChars = ....; //I advise to make

我有一个字符串,我想检查它是否包含一些特定的字符。如果包含此字符,则必须出现错误消息

我有一个想法并计划使用“模式”和“匹配器”类:

现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数“sourceToScan”)。正则表达式必须是经过筛选的符号,如
[]/{}%$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

如何在示例中实现此解决方案?

使用,此处不需要正则表达式:

String[] mySpecialChars = ....;   //I advise to make it constant
for(String special : mySpecialChars) {
   if(myStr.contains(special)) {
      //error
   }
}

您可以将其放入方法中,以获得更清晰的解决方案:

private boolean containsSpecialChars(String myStr) {
    String[] mySpecialChars = ....; 
    for(String special : mySpecialChars) {
       if(myStr.contains(special)) {
          return false;
       }
    }
    return true;
}

注意:正则表达式适用于具有某种模式的情况。在这种情况下,您只需检查字符串中是否存在某些字符,而不是任何特殊/特定模式。这就是为什么在此处使用正则表达式不太合适的原因。

要详细说明字符串的清洁度,请比较String.contains()方法和正则表达式方法,以及String.contains():

和正则表达式

String specialCharsPattern = ".*[\\]\\[].*";

if (targetString.matches(specialCharsPattern)) {
     return false;
}
return true;
示例:

class Match {
    public static void main(String args[]) {
        String str = "test[me";
        System.out.println(str + ": " + containsSpecialCharsRegEx(str));
        System.out.println(str + ": " + containsSpecialCharsContains(str));
    }
    public static boolean containsSpecialCharsRegEx(String targetString) {
        final String specialCharsPattern = ".*[\\]\\[].*"; // for the symbols [ and ] in this example

        if (targetString.matches(specialCharsPattern)) {
             return true;
        }
        return false;
    }
    public static boolean containsSpecialCharsContains(String targetString) {
        final String[] specialCharsArr = {"]", "["}; // for the symbols [ and ] in this example

        for (String specialChar: specialCharsArr) {
            if (targetString.contains(specialChar)) {
                return true;
            }
        }
        return false;
    }
}

我当然认为.contains更干净,更容易理解。

但是这个解决方案有点不实用。我想使用类模式和匹配器,所以我不需要任何类型的循环,因为这个解决方案是为在这种情况下使用而发明的。我不认为它不漂亮,你可以在met中编写hod
包含特殊字符
就完成了。好的,但是我必须如何初始化数组字符串[]mySpecialChars?@Marwief我建议您将其设置为最终值,并一次性将所有特殊字符放在那里。我再次提出一个问题。如何使用一些特殊字符(如Ö、ä、Ü等)来标记字符串数组。这对我来说非常重要,因为UTF 8编码。现在,直接在java代码中使用字符串数组的解决方案会导致错误
String specialCharsPattern = ".*[\\]\\[].*";

if (targetString.matches(specialCharsPattern)) {
     return false;
}
return true;
class Match {
    public static void main(String args[]) {
        String str = "test[me";
        System.out.println(str + ": " + containsSpecialCharsRegEx(str));
        System.out.println(str + ": " + containsSpecialCharsContains(str));
    }
    public static boolean containsSpecialCharsRegEx(String targetString) {
        final String specialCharsPattern = ".*[\\]\\[].*"; // for the symbols [ and ] in this example

        if (targetString.matches(specialCharsPattern)) {
             return true;
        }
        return false;
    }
    public static boolean containsSpecialCharsContains(String targetString) {
        final String[] specialCharsArr = {"]", "["}; // for the symbols [ and ] in this example

        for (String specialChar: specialCharsArr) {
            if (targetString.contains(specialChar)) {
                return true;
            }
        }
        return false;
    }
}