我有一个字符串
match = "234 587.094";
我需要找到的,使用正则表达式,只是字符串中的每个整数
与模式匹配时,只应返回234
,因为587.094
不是整数。
这是我到目前为止的模式:
Pattern int_p = "(\\d+[^(\\.?\\d+)])";
答案 0 :(得分:5)
你可以尝试这种模式
"\\d+(\\.\\d+)?"
它匹配整数和小数,但是当你找到小数时,你就忽略它。
public static void main(String[] args) throws Exception {
String data = "234 587.094 123 3.4 6";
Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?").matcher(data);
while (matcher.find()) {
if (matcher.group(1) == null) {
System.out.println(matcher.group());
}
}
}
结果:
234
123
6
或者您可以使用此模式{/ 1}删除所有十进制数字
replaceAll()
然后你只剩下你可以使用模式的整数"\\d+\\.\\d+"
\\d+
结果:
public static void main(String[] args) throws Exception {
String data = "234 587.094 123 3.4 6 99999.9999 876";
// Remove decimal numbers
data = data.replaceAll("\\d+\\.\\d+", "");
Matcher matcher = Pattern.compile("\\d+").matcher(data);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
答案 1 :(得分:1)
首先使用1个或多个空格\s+
拆分String并存储在字符串数组中,然后过滤掉
不包含"."
的值。试试这个:
String str = "234 587.094";
String[] array = str.split("\\s+");
for(int i = 0; i < array.length; i++)
{
if(!array[i].contains(".")){
System.out.println(array[i]);
}
}
答案 2 :(得分:1)
在一行中,如果找到一个,此代码将提取数字,否则提取空白:
String num = str.replaceAll(".*?(^|[^.\\d])(\\d+)?($|[^.\\d]).*$", "$2");
这是通过要求组的前后字符既不是点也不是数字(并覆盖输入开始/结束的边缘情况)来实现的。
如果通过将?
添加到捕获的组来实现不匹配,则返回空白的添加特殊酱,允许它不存在(因此不捕获任何内容),但允许整个表达式仍然匹配整个输入,因此什么也没有回来。
这是一些测试代码:
for (String str : new String[] {"234 587.094", "234", "xxx", "foo 587.094"})
System.out.println(str.replaceAll(".*?(^|[^.\\d])(\\d+)?($|[^.\\d]).*$", "$2"));
输出:
234
234
<blank>
<blank>