java正则表达式匹配任何整数或双精度然后替换非数字/十进制字符

时间:2015-07-10 14:56:47

标签: java regex

我试图将字符串匹配到任何整数或双,然后,如果它不匹配,我想删除所有无效字符,使字符串成为有效的整数或双(或空字符串)。到目前为止,这是我所拥有的,但它将打印15-这是无效的

String anchorGuyField = "15-";

if(!anchorGuyField.matches("-?\\d+(.\\d+)?")){ //match integer or double
        anchorGuyField = anchorGuyField.replaceAll("[^-?\\d+(.\\d+)?]", ""); //attempt to replace invalid chars... failing here
    }

2 个答案:

答案 0 :(得分:1)

您可以使用Pattern()Matcher()来验证字符串是否适合转换为int或double:

public class Match{
    public static void main(String[] args){
        String anchorGuyField = "asdasda-15.56757-asdasd";

        if(!anchorGuyField.matches("(-?\\d+(\\.\\d+)?)")){ //match integer or double
            Pattern pattern = Pattern.compile("(-?\\d+(\\.\\d+)?)");
            Matcher matcher = pattern.matcher(anchorGuyField);
            if(matcher.find()){
            anchorGuyField = anchorGuyField.substring(matcher.start(),matcher.end());
            }
        }
        System.out.println(anchorGuyField);
    }
}

使用:

anchorGuyField = anchorGuyField.replaceAll("[^-?\\d+(.\\d+)?]", "");

您实际上从字符串中删除了您想要匹配的内容,来自15 15-的{​​{1}},您应该只获得-

答案 1 :(得分:0)

否定检查没有给定的字符匹配。 15-只包含数字或逗号,因此没有匹配第二个正则表达式。也许你可以使用别的东西而不是正则表达式来过滤掉字符。

检查第一个字符是减号还是数字,否则将其删除,然后删除所有非数字字符。