我有一个只能包含特定字符的字符串:{}()[]
我创建了一个validate方法,该方法检查字符串是否包含禁用字符(按禁用字符,我指的是不是{}()[]
的所有内容)
这是我的代码:
private void validate(String string) {
char [] charArray = string.toCharArray();
for (Character c : charArray) {
if (!"{}()[]".contains(c.toString())){
throw new IllegalArgumentException("The string contains forbidden characters");
}
}
}
我想知道是否存在更好的方法,因为我的方法似乎不正确。
答案 0 :(得分:4)
如果我采用了实现此方法的方式,我将对其进行如下修改:
private static void validate(String str) {
for (char c : str.toCharArray()) {
if ("{}()[]".indexOf(c) < 0){
throw new IllegalArgumentException("The string contains forbidden characters");
}
}
}
更改如下:
char
数组声明临时变量。使用indexOf
查找字符,而不是将c
转换为String
以使用.contains()
。
由于不再需要基元char
,因此不再需要
toString()
。
不命名参数string
,因为这会引起混淆,不是一种好习惯。
注意::contains
调用indexOf()
,因此从技术上讲,这也为您节省了每次迭代的方法调用。
答案 1 :(得分:1)
如果您使用的是Java 8,我建议您使用Stream。 这样您可以将char省略为String拳击内容。
auto op = add ? (increase ? +[](const T& lhs, const T& rhs) { return lhs + rhs; }
: +[](const T& lhs, const T& rhs) { return lhs - rhs; })
: (increase ? +[](const T& lhs, const T& rhs) { return lhs * rhs; }
: +[](const T& lhs, const T& rhs) { return lhs / rhs; });
数字为ASCII codes表示禁止使用的字符,如果需要,您可以将其替换为字符:
private void validate_stream(String str) {
if(str.chars().anyMatch(a -> a==125||a==123||a==93||a==91||a==41||a==40))
throw new IllegalArgumentException("The string contains forbidden characters");
}
答案 2 :(得分:-1)
我希望这对您有用:我已经将代码和您的代码一起添加了。
我使用了正则表达式模式,其中\\
转义了括号,这在正则表达式中具有特殊含义。并使用字符串的match方法,它尝试使用给定的reg ex模式匹配给定的字符串值。在这种情况下,如我们使用not(!)一样,如果我们给定字符串"{}()[]as"
,则它满足if not条件并显示“ not match”,否则,如果我们给定字符串诸如"{}()[]"
,否则大小写将打印。您可以通过引发异常来更改此设置。
private static void validate(String string)
{
String pattern = "\\{\\}\\(\\)\\[\\]";
if(!string.matches(pattern)) {
System.out.println("not matched:"+string);
}
else {
System.out.println("data matched:"+string);
}
char [] charArray = string.toCharArray();
for (Character c : charArray) {
if (!"{}()[]".contains(c.toString())){
throw new IllegalArgumentException("The string contains forbidden characters");
}
}
}
所有方括号都是Meta字符,此处引用: http://tutorials.jenkov.com/java-regex/index.html