我有一个字符串,我想检查它是否包含一些特定的字符。如果它包含此字符,则会出现错误消息。
我有一个想法,并计划与班级合作"模式"和"匹配":
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"。正则表达式会过滤掉像[]/{}%$§
这样的符号......等等......
如何在示例中实现此解决方案?
答案 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它更干净,更容易理解。