我有一个TextField,可以输入值;我需要将输入的值转换为Int并使用S.O.Println显示它。
EDIT:
我现在试过了:
try {
int i = Integer.parseInt(myText.getText());
System.out.println("This is an integer " + i);
}
catch (NumberFormatException x) {
System.out.println("Error : "+ x.getMessage());
}
但它给了我:
This is an integer 122 // When I type 122
Error : For input string: "122,5" // When I type 122,5
Error : For input string: "122.5" // When I type 122.5
任何想法。
EDIT:
就是这样:
double d = Double.parseDouble(myText.getText());
int i = (int)d;
答案 0 :(得分:3)
您似乎使用逗号作为分隔符,而不是点。无论如何,您将无法将其解析为int
。您需要Double.parseDouble(..)
使用可以使用与当前语言环境对应的NumberFormat
来解析输入。
如果您正在使用SWT(标记的日食) - 我认为您可以通过在文本字段中添加VerifyListener
来限制可能的字符。在您的监听器中,如果允许输入,则在传递的事件上调用doit()
。
如果使用AWT(TextField
是awt的文本组件) - 请参阅something like this
答案 1 :(得分:0)
您尝试将字符串“11,5”解析为整数。它绝对不是整数。因此抛出异常。
您可以尝试使用Double.parseDouble(),结果取决于您的Locale。如果你是英语语言环境,它需要点(。)而不是昏迷,所以数字应该看起来像11.5
答案 2 :(得分:0)
逗号给你一个解析错误。如果需要逗号,可以将其用作分隔符并分别解析双方。
以下是在字符串中分隔两个逗号分隔值的示例。
String str = "1,2,3,4";
StringTokenizer st = new StringTokenizer(str, ",");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
输出结果为:
1
2
3
4
答案 3 :(得分:0)
11,5
不是Java可以在没有其他交互的情况下解析的数字。您可以用小数点替换逗号,同时删除任何空格(取决于您的语言环境):
Double.parseDouble(myText.getText().replaceAll(",", ".").replaceAll(" ", ""));
注意:
您不能将逗号用作千位分隔符。
答案 4 :(得分:-1)
那是因为myText.getText()
是11,5
(不是数字)而不是11.5
(双倍)。
尝试做,
Double.parseDouble(myText.getText().replaceAll(",", "."));
这会将,
替换为.
。
或者,使用NumberFormat
进行数字转换。
此外,我注意到您在解析Integer.parseInt()
个数字时正在使用double
。这就是你抛出异常的原因。
您应该使用NumberFormat.getInstance(locale).parse(myText.getText())
来获得所需的结果。不要忘记parse()
会返回Number
个对象,所以为了得到一个,请执行以下操作:
double d = NumberFormat.getInstance(locale).parse(myText.getText()).doubleValue();