我在JTextArea
中输入一个列表,当我按下一个按钮时,它会运行下面的方法。我需要检查str[i+1]
,str[i+2]
是String
而不是int
。
public void readData(JTextArea input) {
String[] str = input.getText().split("\n");
for(int i =1; i< str.length; i= i+3) {
try {
Integer.parseInt(str[i]);
simulator.add(new Process(Integer.parseInt(str[i]), str[i+1],str[i+2]));
} catch(NumberFormatException e) {
System.out.println("Please enter an integer only " +
str[i] + " is not an integer");
}
}
}
答案 0 :(得分:3)
您可以使用一个函数尝试将字符串解析为Integer
或Double
,如果成功则返回true,或者返回false则在解析期间抛出异常。解析为Double
应该足够了,因为所有整数值都是十进制值而没有.0
public static boolean isNumber(String s) {
try {
Double.parseDouble(s);
/* Use Integer.parseInt(s) instead, if
you want to check if the String s
is an Integer */
} catch(NumberFormatException e) { // string is not a number
return false;
}
return true;
}
然后您可以说if(!isNumber(str))
来检查String
str是否不是数字。
或者,您可以通过交换isNumber()
和isNotNumber()
语句使return false
成为return true
。
如果您不想使用例外,则会有以下不同的方法。由于我们知道有效数字只能包含数字,小数点最多只能包含1个点,因此我们可以遍历字符串并检查每个字符:
以下是一个示例函数:
public static boolean isNumber(String s) {
int dotCount = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) != '.' && !Character.isDigit(s.charAt(i))) {
return false;
} else if(s.charAt(i) == '.') {
if(dotCount == 1) {
return false;
}
dotCount = 1;
}
}
return true;
}
编辑:基于@MadProgrammer的建议:
一种更通用的方法,它接受以逗号分隔的值,例如1,35
或数字字符串中的任意数量的空格,例如123 456 . 333
。
<强>方法强>
遍历字符串并检查每个字符:
所以代码看起来像是:
public static boolean isNumber(String s) {
int separatorCount = 0; // count dots and commas
char currChar;
s.trim(); // remove trailing and leading whitespace
for (int i = 0; i < s.length(); i++) {
currChar = s.charAt(i);
if (currChar != '.' && currChar != ',' && currChar != ' '
&& !Character.isDigit(currChar)) {
return false;
} else if (currChar == '.' || currChar == ',') {
if (separatorCount == 1) {
return false;
}
separatorCount = 1;
}
}
return true;
}
另一种解决方案可以使用NumberFormat
的{{1}}方法。但是,此方法仅检查字符串的开头(例如,对于parse()
它将返回12.3.3
),因此如果返回的字符串不等于输入字符串,则必须返回false如果抛出12.3
。
ParseException
注意:所有方法都应该对输入public static boolean isNumber(String s) {
try {
String newVal = NumberFormat.getInstance().parse(s).toString();
if (!newVal.equals(s)) {
return false;
}
} catch (ParseException e) {
return false;
}
return true;
}
进行检查if(s == null) { return false; }
以阻止String
答案 1 :(得分:2)
您的规则很少,您没有指定,
或.
之类的内容是否被视为数字的一部分(例如1, 000.01
),同样,您不要定义是否允许值包含数值,但是......
尝试使用Integer.parseInt
解析每个值(或两者的串联),如果它们通过,则它们不是基于String
(或文本)的值......
使用String
Character#isLetter
中的每个字符,看它是否包含多个数字
使用正则表达式确定该值是否包含除数字以外的其他内容。
答案 2 :(得分:2)
您可以尝试使用这个简单的正则表达式来检查字符串是否代表数字: -
String str = "12345";
System.out.println(str.matches("\\d+"));
答案 3 :(得分:0)
正则表达式似乎是最好的选择。这是一个正则表达式,它将用逗号分析浮点数和整数以及货币值。
String numberRex = "^([\\d]*\\.*\\d*|[\\d,]*\\.*\\d*)$";
"1234,455.43".matches(numberRex); // true
答案 4 :(得分:0)
这是一个简单的测试,断言至少有一个非数字字符:
if (str.matches(".*[^\\d.].*"))
正则表达式翻译为&#34;在输入的某处,有一个不是数字或点的字符&#34;