业务场景:输入【1核】、【2g】、【3mbps】需要将数字拿到,拼接成为sql语句。
一开始考虑用字符串截取,后续思考,用正则biao表达式会更好些,下面直接上代码:
一、代码实现
package com.test.test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TTT {
public static void main(String[] args) {
//2位数字+"核"
String regit="[1-9]{1,2}[\u6838]";
Pattern abs = Pattern.compile(regit);
String condition="32核";
Matcher mat = abs.matcher(condition);
String str="";
if(mat.matches()) {
str=mat.group(0).split("核")[0];
System.out.println(str);
}
//2位数字+"G"
regit="[1-9]{1,2}[Gg]";
condition="55g";
abs=Pattern.compile(regit);
mat = abs.matcher(condition);
if(mat.matches()) {
str=mat.group(0).toUpperCase().split("G")[0];
System.out.println(str);
}
//2位数字+"Mbps"
regit="[1-9]{1,4}[Mm][Bb][Pp][Ss]";
condition="87mbps";
abs=Pattern.compile(regit);
mat = abs.matcher(condition);
if(mat.matches()) {
str=mat.group(0).toUpperCase().split("MBPS")[0];
System.out.println(str);
}
}
}
输出结果:
截取完成
二、注意事项
1.匹配中文字:核,需要将核,转化为unicode,即:\u6838。(转换地址:http://www.bejson.com/convert/unicode_chinese/)
2.单位注意大小写,【Gg】代表匹配大写的G和小写的g
3.不建议直接截取。截取一般情况下是很容易出现异常的,万一得到的数据,只有一个mbp,直接截取了,往往会报错。但是如果先用正则表达式去判断一下,判断通过了,再去执行截取动作的话,这样成功率就比较高。
4.该改造,只针对于简单场景,如果是比较复杂的查询环境,建议使用solr等专业的搜索引擎实现。