java - 匹配可能为 double 或不是 double 的可能负数

标签 java regex

我正在用 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/

相关文章:

regex - R:正则表达式在此区域设置中无效

python - 匹配字符串中多个选项中的第一个子字符串选项

sql - 使用正则表达式解析简单的查询构造

java - JBoss AS 7 : how to make independant deployment of EJB and dependent WAR?

java - 其余输出与控制台与 Tomcat localhost 不同

java - log4j:如何使用 SocketAppender?

java - 在 Java 中清理 JSON 字符串值

java - 如何检查图像是否可见(Webdriver)

php - 整数或特定单词的 Laravel 验证

java - 匹配模式用引号引起来