需求
需要提取字符串中的租金额度,需要将字符串中的数字提取出来,提取出的数字必须是连续数字
参考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;
}