我正在尝试检查字符串中是否只包含特殊字符。如果它只有!@#$%^&*()_+
,我希望它退出。如果其中有一个字母,!@#$%^&*()_+d.
我想删除除d
和.
到目前为止,整个字符串的条件只包含似乎不起作用的符号。
if (everything.matches("[-/@#$%^&_+=().]")){
System.err.println("This only contained symbols, exit");
System.exit(0);
}
为什么这不起作用? everything
也是一个字符串!
此外,我如何检查字符串中是否还有letter
和.
,如果是,请删除除letter
和{之外的所有符号{1}}
谢谢。
测试一个字母和.
的文件:http://iforce.co.nz/i/ywvy2ev4.tbb.png
测试所有特殊字符:http://iforce.co.nz/i/pw3c2iuf.ccq.png
.
时,我的everything
变量:.
我的^&*^&*(^&*(d&*&.*
变量:everything
这是我的完整代码,直到我使用正则表达式检查:
%^&^%.##
}
答案 0 :(得分:0)
你可以使用以下习语只匹配非字母数字(我在这里也添加了非空格):
String[] test = {"!@#$%^&*()_+d.", "@#$%^&*()_+"};
// iterating test cases
for (String s: test) {
// | replacing
// | | non-alnums/whitespaces
// | | (character class)
// | | | with empty string
// | | |
String replaced = s.replaceAll("[^\\p{Alnum}\\s]", "");
System.out.printf(
"Replaced: %s%nNeed to quit? %b%n",
replaced,
replaced.isEmpty()
);
}
<强>输出强>
Replaced: d
Need to quit? false
Replaced:
Need to quit? true
答案 1 :(得分:0)
粘贴你的表达here,它抱怨未转义的挡板。因此,您需要转义/
并将其设为\/
。
要检查字符串是否包含(英文)字符及其中的句点,您可以使用([a-zA-z].+?\.)|(\..+?[a-zA-z])
或更多字符,尝试匹配[A-Za-z]
并确保indexOf(".")
不匹配产量-1。要删除任何非句号或英文字符的内容,只需使用.replace("[^A-Za-z.]", "")
即可。这将删除任何不是字母或句点的内容,并用空字符串替换它。
答案 2 :(得分:0)
你的模式只匹配1次,你应该像这样添加*
if (everything.matches("^[!@#$%^&*()_+]*$")){
System.err.println("This only contained symbols, exit");
System.exit(0);
}
答案 3 :(得分:0)
matches
检查整个字符串是否可以由正则表达式匹配,但在
everything.matches("[-/@#$%^&_+=().]")
正则表达式只能匹配一个字符,因此您可以添加
*
使用量词来匹配该类型的零个或多个字符,+
量词,让它匹配该类型的一个或多个字符因此,假设您也不想传递空字符串,可以使用
everything.matches("[-/@#$%^&_+=().]*")
现在关于d
和.
部分..您可以在已提及的条件之后添加另一个条件,以检查此时它是否还包含d
或.
和它们删除除
if (everything.matches("[-/@#$%^&_+=().]*")){
System.err.println("This only contained symbols, exit");
System.exit(0);
}else if(everything.matches("[-/@#$%^&_+=()d.]*")){
//lets remove every character which is not `d` or `.`
everything = everything.replaceAll("[^d.]","");
}
编辑:
你的正则表达式中错过了*
个字符。试试
if (everything.matches("[-/@#$%^&_+=()*.]")){
System.err.println("This only contained symbols, exit");
System.exit(0);
}else if(everything.matches("[-/@#$%^&_+=()*d.]*")){
//lets remove every character which is not `d` or `.`
everything = everything.replaceAll("[^d.]","");
System.out.println(everything);
}
或者,如果您想接受任何字母,请将d
替换为a-zA-Z
。