String str = "上海南京路356号401室";
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(str);
        while(m.find()){
            System.out.println(m.group(0));
            break;
        }
int number = Integer.parseInt(m.group(0));
这是个提取一个字符串中第一个连续数字的正则,比如这个会得到356
但是有时这个数据不规范不包含有数字,这时  int number=Integer.parseInt(m.group(0))这个会报错会报not match的错误我想遇到没有数字的时候跳出,这个该如何写?

解决方案 »

  1.   

    int number = 0;
    String str = "上海南京路356号401室";
       Pattern p = Pattern.compile("\\d+");
       Matcher m = p.matcher(str);   while(m.find()){
        number=Integer.parseInt(m.group(0))
        break;
       }
      System.out.println(number);
      

  2.   

    做个条件判断啊!
    if(m.find()){
    ...
    }
      

  3.   

    既然这是个提取一个字符串中第一个连续数字的正则,那么在第一次m.find()之后,m.group()的值就是第一次的匹配值,不要在循环中m.group(0),因为在没有匹配的情况下取下标0的值,就会抛异常,所以代码应该如下:import java.util.regex.Pattern;
    import java.util.regex.Matcher;public class Demo004 {
    public static void main(String[] args) {
    String str = "上海南京路号室";
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(str);
    int number = 0;
    while (m.find()) {//如果有匹配,开始循环
    number = Integer.parseInt(m.group());
    break;//循环能开始的话,break之后,number值就是第一次匹配值
    }
    System.out.println(number);
    }
    }