我正在用 Java 构建一个温度转换器。用户将在 JTextField
中输入一个数字,使用 JComboBox
选择其起始标签,并使用 JRadioButton
在 按钮组
。用户输入的数字可以有不同的可能性。可以是
- 单个整数,例如5
- 多个整数,例如55
- 双倍,例如5.5
- 上述任何一项的负版本,例如-5、-55或-5.5
JTextField
有一个方法getText()
,它返回字符串的值。然后将其转换为 double 型,最后转换为所需的结束标签。由于必须将字符串转换为 double 型,因此 JTextField
中不允许使用字母字符。所以我使用正则表达式来解决这个问题。我目前有
String tempV = startTempValInput.getText();
if (tempV.matches("-?[0-9]+\\.[0-9]+")) {
// Code Here
}
但是,这不能识别单个或多个整数。如何修改它以包含整数?
最佳答案
tempV.matches("-?[0-9]+(\\.[0-9]+)?")
分解:
-?
- 这将匹配负数 0 次或 1 次[0-9]+
- 这将匹配数字字符 1 次或多次(\\.[0-9]+)?
- 这会将可能的小数位匹配到无穷大\\.
- 这将匹配句点。需要双重转义,因为 Java 将正则表达式识别为普通字符串。这意味着你必须转义反斜杠[0-9]+
- 这将匹配数字字符 1 次或多次- 这一切都包含在
()?
中,因为小数点位置是可选的。如果您尝试使用-?[0-9]+\\.?[0-9]+
,它将无法识别单个整数。它会将负数和句点视为可选,但由于+
返回 1 或更多,因此它需要至少两个整数。
另一种选择是
tempV.matches("-?([0-9]+\\.)?[0-9]+")
关于java - 匹配可能为 double 或不是 double 的可能负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000062/