java - Android java的正则表达式提取数字和特定符号

标签 java android regex

我正在使用计算器,在 EditText 中编写整个语句后,我想从编辑文本字段中提取数字和计算器符号。这些数字可以是简单的整数或小数,即; float 和 double 。例如,我现在有这个字符串,2 + 2.7 - 10 x 20.000。正则表达式将分别提取 +、- 和 x,并将数字提取为: 2,2.7,10,20.000。基本上我需要对每个进行正则表达式。

最佳答案

您正在搜索的正则表达式将与拆分中的正则表达式不同。如果您为此使用Pattern,事情将会变得非常缓慢且复杂。所以这里我们使用String#split()

这是您的正则表达式:

"\s*([^\d.]+)\s*"

正则表达式说明:

  • \s* - 匹配每个空白(如果可用)
  • ([^\d.]+) - 尽可能多地捕获除数字和点之外的所有内容
  • \s* - 匹配每个空白(如果可用)

注意[1]:再次,由于它将在拆分中使用,因此您不想捕获数字,此正则表达式将匹配除数字之外的任何内容,并将它们从字符串,因此如果您在 Pattern#exec() 中使用它们,您将得到不同的输出。

这样我们就可以简单地:

"2 + 2.7 - 10 x 20.000".split("\\s*([^\\d.]+)\\s*");

注意[2]:Java 中字符串内的正则表达式必须像上面那样对其反斜杠进行转义。而且,捕获组 (...) 没有用,因为我们只是将其拆分,如果需要,请随意删除它们。

JShell 输出:

$1 ==> String[4] { "2", "2.7", "10", "20.000" }

Java 代码 fragment : https://ideone.com/CHjKNB

关于java - Android java的正则表达式提取数字和特定符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45388113/

相关文章:

android - Firestore : Totally disable cache for read and write

javascript - Angular js :unexpected token error shown in android studio console, 但在浏览器中工作正常

java - Android EditText 专门针对 URL

java - 在 Java 中使用正则表达式验证字符串是否包含模式

java - 针对非标准 Java 技术的 Swagger API 集成

java - 为什么 Java 的文件浏览器看起来如此古老?

java - JNLP 无法在浏览器中正确启动(使用 dtjava.js 部署)

java - java多线程中如何锁定多个资源

javascript正则表达式查找特定句子

python - 如何向我的街道名称正则表达式添加一种模式?