java提取字符串中的数字,以及地址标准化

需求

需要提取字符串中的租金额度,需要将字符串中的数字提取出来,提取出的数字必须是连续数字
参考Java 正则表达式如何使用正则表达式从字符串中提取数字?

提取数字

要使用java的正则表达式,必须要了解java的三个类

  • Pattern类。pattern对象是一个正则表达式的编译表示,Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
  • Matcher 类:Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
  • PatternSyntaxException:PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
    代码示例
 public static void main(String[] args) {
        String s1 = "露天:150元/位·月,5元/位·小时;地下:500元/位·月";
        String[] split = s1.split(",|;");//分割符
        String regex = "\\d+";//正则表达式匹配字符串的数字
        Pattern pattern = Pattern.compile(regex);
        for (String s : split) {
            Matcher matcher = pattern.matcher(s);
            System.out.println(s);
            while(matcher.find()) {
                System.out.println(matcher.group()+" ");
            }
        }
    }

示例结果
在这里插入图片描述

字符串补充

需求:采集的地址格式存在:XX路3、4、6号,需要处理成XX路XX号,所以需要补充数字后面的号和补充前面的地址,如:中山路3、4、6号,补充成中山路3号、中山路4号、中山路6号。
思路:先用分割符将字符串分割,找到是数字结尾的字符串补充号,找到数字开头的补充路,还有就是需要截取数字前面的地址。
这里我分成了两步进行处理,先补充数字后面的号,然后补充数字前面的地址

//补充地址数字后面的号
public static Address dealWithAddress(Address address){
       if(address.AddressResult!=null){
           System.out.println(address.AddressResult);
           String[] splits = address.AddressResult.split("、");
           Pattern pattern = Pattern.compile("[0-9]$");
           String str = "";
           for (String s : splits) {
               Matcher matcher = pattern.matcher(s);
               if(matcher.find()){
                   s=s+"号";
               }
               if(str!=""){
                   str = str+"、"+s;
               }else {
                   str = s;
               }

           }
           address.AddressResult=str;
           return address;
       }
       return null;
   }

补充数字前面的地址

//补充数字前面的地址
public static Address addressParsingComma(Address address){
        if(address.AddressResult!=null){
           String[] splits = address.AddressResult.split("、");
           String head = "";
           Pattern pattern = Pattern.compile("^[1-9]");  //找到数字开口
           Pattern pattern2 = Pattern.compile("[0-9]");  //找到数字所在位置
           String str ="";
           for (int i = 0; i < splits.length; i++) {
               Matcher matcher = pattern.matcher(splits[i]);
               Matcher matcher2 = pattern2.matcher(splits[i]);
               if(matcher.find()){//找到数字开口
                   splits[i] = head+splits[i];
               }else{
                   if(matcher2.find()){//找到数字所在位置
                       int index = matcher2.start();
                       head = splits[i].substring(0,index);
                   }
               }
               if(str!=""){
                   str = str+"、"+splits[i];
               }else {
                   str = splits[i];
               }
           }
           address.AddressResult = str;
           return address;
        }
        return null;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值