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

时间:2013-11-26 06:40:03

标签: java string

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

我有一个想法,并计划与班级合作"模式"和"匹配":

public boolean sourceIncludesValidCharacters(String sourceToScan, String searchCharacter) {

    boolean sourceIncludesValidCharacters = true;

    if (StringUtils.isBlank(sourceToScan)) {
        sourceIncludesValidCharacters = false;
    } else {
        Pattern pattern = Pattern.compile(searchCharacter);
        Matcher matcher = pattern.matcher(sourceToScan);
        sourceIncludesValidCharacters = !matcher.find();
    }
    return sourceIncludesValidCharacters;
}

现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数" sourceToScan"。正则表达式会过滤掉像[]/{}%$§这样的符号......等等......

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

2 个答案:

答案 0 :(得分:2)

使用String#contains,这里不需要正则表达式:

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;
}

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

答案 1 :(得分:0)

使用String.contains()来详细说明string.contains()方法和正则表达式方法的清洁度,比较:

String specialChars[] = {"]", "["};

for (String char: specialChars) {
    if (targetString.contains(char)) {
         return false;
    }
}
return true;

并使用正则表达式

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它更干净,更容易理解。