需求
之前在工作中有遇到过源数据将员工工号和员工姓名组合在一起作为一个字段保存,在实际处理中我们需要把它进行拆分处理。
数据存储样式为员工工号+员工姓名,但由于工号的样式有带字母开头的也不带字母开头的,也有大写字母和小写字母的存在,大致分为“A10010张三”,“2010李四”,“b1001王五”,接下来我们根据实际情况进行拆分处理。
说明
首先我们需要了解Java中常用的一些正则表达式含义。
字符 | 说明 |
---|---|
^ | 表示匹配字符串的开头位置 |
$ | 表示匹配字符串的结尾位置 |
* | 表示匹配零次或多次前面的字符或子表达式 |
+ | 表示匹配一次或多次前面的字符或子表达式 |
? | 表示匹配零次或一次前面的字符或子表达式 |
[a-z] | 表示匹配”a”到”z”范围内的任何小写字母 |
[A-Z] | 表示匹配”A”到”Z”范围内的任何大写字母 |
[a-zA-Z] | 表示匹配”A”到”Z”范围内的任何大小写字母 |
\d | 表示匹配任意数字 |
使用
这里我们可以根据实际情况自己编写符合实际情况的正则表达式。
public static void main(String[] args) {
String str = "AB1014张三";
String unitname = str.replaceAll("^[a-zA-Z]*\\d+", "");
System.out.println("unitname: "+unitname);
String staffcode = StringUtils.substringBefore(str, unitname);
System.out.println("staffcode: "+staffcode);
}
//打印结果
unitname: 张三
staffcode: AB1014