我正在编写此方法来检查不同类型的不良用户输入。我一直在写一个BigInt课程,我需要确保没有类似" ++ 2"," - 2",字母,数字按空格分隔,例如&#34 ; 222 333"或句号。我之前从未使用过字符串拆分器,而且我没有得到预期的tokenCount。例如,如果我输入" ++ 2"进入控制台tokenCount = 1,但我以为我会得到3。
有关如何解决此问题的任何想法?
public static boolean checkValidInput(String val) {
String input = val;
String[] delims = {"//+", "-", "a", " ", "."};
String[] tokens;
int tokenCount;
boolean validInput = true;
for(int i = 0; i < delims.length; i++) {
tokens = input.split(delims[i]);
tokenCount = tokens.length;
if(delims[i].equals("//+")){
if(tokenCount > 2){
validInput = true;
} else {
validInput = false;
}
} else if(delims[i].equals("-")){
if(tokenCount > 2){
validInput = true;
} else {
validInput = false;
}
} else if(delims[i].equals("a")){
if(tokenCount > 1){
validInput = true;
} else {
validInput = false;
}
} else if(delims[i].equals(" ")){
if(tokenCount > 1){
validInput = true;
} else {
validInput = false;
}
} else if(delims[i].equals(".")){
if(tokenCount > 1){
validInput = true;
} else {
validInput = false;
}
}
}
}
答案 0 :(得分:2)
您的计数为1
,因为您错误地转义了特殊字符+
(在正则表达式中它具有特殊含义)。它应该使用\\
转义:
String[] delims = {"\\+", "-", "a", " ", "."};
注意方法split(String)
需要 regex 作为参数。
答案 1 :(得分:0)
尝试正则表达式
input.matches("[+-]?\\d+");