我正在编写这段代码,用户输入一个包含数字的字符串,例如
H3.07LLo my nam3 is bob12
输出应为
3.07, 3.0, 12.0
我设法得到一个正则表达式来寻找双打,但我不知道如何查找整数。这是我的正则表达式:
(-)?(([^\\d])(0)|[1-9][0-9]*)(.)([0-9]+)
我对正则表达式很新。我尝试添加|[0-9]|
,但无论我把它放在我当前的正则表达式中,我一直在搞乱它
答案 0 :(得分:3)
您可以使用:
(-?[0-9]+(?:[,.][0-9]+)?)
说明:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
[0-9]+ any character of: '0' to '9' (1 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
(?: group, but do not capture (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
[,.] any character of: ',', '.'
--------------------------------------------------------------------------------
[0-9]+ any character of: '0' to '9' (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
)? end of grouping
--------------------------------------------------------------------------------
) end of \1
答案 1 :(得分:2)
你可以通过用空格替换非数字字符,修剪然后分割空间来在一行中完成。
String[] numbers = str.replaceAll("[^0-9.]+", " ").trim().split(" ");
它为您提供输入的数字部分。如果你真的需要双打:
double[] ds = new double[numbers.length];
for (int i = 0; i < numbers.length; i++) {
ds[i] = Double.parseDouble(numbers[i]);
}
对于一些java 8的乐趣,整个事情可以在一行中完成!
double[] nums = Arrays.stream(str.replaceAll("[^0-9.]+", " ").trim().split(" ")).mapToDouble(Double::parseDouble).toArray();
答案 2 :(得分:1)
正则表达式中存在一个问题,即使用点(.
)字符来匹配文字点。点字符是正则表达式术语中与任何字符匹配的特殊符号。为了只匹配小数点.
,您需要使用\.
转义它。
要匹配整数,您可以使用问号符号将包含小数点和小数位的组设为可选。除非您对模式进行分组,否则也不需要括号。所以你的正则表达式可能只是-?(\d+)(\.\d+)?
。
String input = "H3.07LLo my nam3 is bob12";
Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(input);
while(matcher.find()) {
System.out.println(Double.valueOf(matcher.group()));
}
<强>输出:强>
3.07
3.0
12.0