我正在使用计算器,在 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/