我有一个字符串,我想检查它是否包含某些特定字符。如果包含此字符,则必须出现错误消息。
我有一个想法,并计划使用类“模式”和“匹配器”:
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;
}
现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数“source ceToScan”。正则表达式必须被过滤符号,如[]/{}%$§
等等…
如何在示例中实现此解决方案?
要详细说明清洁度,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;
}
}
我当然认为.包含它更干净,更容易理解。
使用< code>String#contains,这里不需要regex:
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;
}
注意:Regex适合在您有一些模式的情况下使用。在这种情况下,您只需要检查字符串中是否存在某些字符,而不是任何特殊/特定的模式。这就是为什么在这里使用regex不太合适的原因。
问题内容: 我想搭配以下 com.my.company。 moduleA .MyClassName com.my.company。 moduleB .MyClassName com.my.company。 anythingElse .MyClassName 但 不是 以下 com.my.company。 核心 .MyClassName 我当前的简单正则表达式模式是: 因此,基本上,我该如何匹配其他
我知道除了扫描预定义的< code >原语类型,我还可以扫描自己的用户定义模式,这在扫描更复杂的数据时很有帮助。我说的是< code > scanner . next(String pattern)方法。然而,在我读过的关于Java的书中,有一段说 “使用正则表达式进行扫描时有一个警告。该模式仅与下一个输入令牌匹配,因此,如果您的模式包含分隔符,则永远不会匹配。 我不太明白这是什么意思,在哪些情况
我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自
我想使用正则表达式屏蔽字符串的子字符串。 字符串输入=
我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?
https:www.google。com/;ParamName=项目;AccessKey=PDJKJDSJJKNEIOWEMCL/dsjdkhfjf=;值=xyz 在这里,我想用一些虚拟字符串替换值并返回整个字符串。 预期输出:<代码>https:www.google。com/;ParamName=项目;AccessKey=dummyValueHere;值=xyz 是否有人可以通过使用replac