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