Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:regex模式,它忽略任何包含小数的数字_Java_Regex - Fatal编程技术网

Java:regex模式,它忽略任何包含小数的数字

Java:regex模式,它忽略任何包含小数的数字,java,regex,Java,Regex,我有一根绳子 match=“234 587.094” 使用正则表达式,我只需要找到字符串中的每个整数。 当与模式匹配时,它应该只返回234,因为587.094不是整数 以下是我目前为止的模式: Pattern int_p = "(\\d+[^(\\.?\\d+)])"; 首先用1个或多个空格拆分字符串\s+,并存储在字符串数组中,然后过滤掉 不包含“的值。试试这个: String str = "234 587.094"; String[] array = str.split("\\s+");

我有一根绳子
match=“234 587.094”
使用正则表达式,我只需要找到字符串中的每个整数。
当与模式匹配时,它应该只返回
234
,因为
587.094
不是整数

以下是我目前为止的模式:

Pattern int_p = "(\\d+[^(\\.?\\d+)])";

首先用1个或多个空格拆分字符串
\s+
,并存储在字符串数组中,然后过滤掉

不包含
的值。试试这个:

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]);
    }
}
String str=“234 587.094”;
字符串[]数组=str.split(\\s+);
for(int i=0;i
您可以尝试这种模式

"\\d+(\\.\\d+)?"
"\\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
234
123
6
876
更新 或者您可以使用此模式使用
replaceAll()
去掉所有十进制数

"\\d+(\\.\\d+)?"
"\\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());
    }
}
结果:

234
123
6
234
123
6
876

在一行中,如果找到一个数字,此代码将提取该数字,如果没有,则为空:

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>
234
234

你的问题不清楚,如果它只返回“整数”,那么输出不应该是234587吗?@Sentient07,从技术上讲,
587.094
是一个
浮点数
@Sentient07我想他在那里有两个独立的数字“234”和“567.094”,他只想返回那些整数。因此,“123456,7.89,10.3,6”的列表将返回123456和6.0。这是我的问题:如果有任何小数点,我不想要“int”。我知道它仍然显示为一个整数,但如何避免在数字内部某处将数字与十进制匹配?@vulpcod3z我们对输入了解多少?它只包含数字吗?数字可以像
.23
那样以
开头吗?是否可以输入类似
1.2.3.4
?或者它是句子的一部分,数字可以放在句号前面,比如
我是23。
包含
字符串的
方法
采用
字符序列
,而不是正则表达式,因此无需转义该点。此外,在Java中,您需要一个双斜杠来实际转义它。这是迄今为止我尝试过的最有效的解决方案。谢谢