我试图将字符串匹配到任何整数或双,然后,如果它不匹配,我想删除所有无效字符,使字符串成为有效的整数或双(或空字符串)。到目前为止,这是我所拥有的,但它将打印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
}
答案 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-只包含数字或逗号,因此没有匹配第二个正则表达式。也许你可以使用别的东西而不是正则表达式来过滤掉字符。
检查第一个字符是减号还是数字,否则将其删除,然后删除所有非数字字符。