前言
记录一下开发中的小问题
一、问题描述
数据库中的某一列有中英文,如下:
要求删除FLAVOR_NAME
这一列中的英文,如果只有几行就直接手冻了,但是有150行,再手动就太麻烦了,代码操作搞起
二、解决方法
1. 解决逻辑说明
- 先从数据库获取所有的ID和FLAVOR_NAME,为一个javabean 的listA集合。
- 然后新建一个listB集合;对listA集合遍历,对每一个Javabean 进行修改 flavorName 的值,
进行去掉英文(一会儿讲)
,然后添加到listB集合 - 再对集合listB进行遍历,进行数据库的修改即可。
2. 利用java正则表达式去掉字符串中英文
去掉字符串的英文逻辑:
- 先将字符串变成字符数组
- 再对字符数组遍历
- 对每一个字符进行判断是否问英文(注意大小写)
- 再进行取舍操作。
- 去掉字符串中的英文代码案例如下:
package com.adt.service.xfadvice.rpc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @ClassName Test
* @Description TODO
* @Author admin
* @Date 2021/3/11 9:42
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
String flavorName = "冯凡利&abcAsdfghfxxjSASAEFGBV";
char[] chars = flavorName.toCharArray();
StringBuffer stringBuffer = new StringBuffer();
for (char c : chars) {
Pattern p = Pattern.compile("[a-zA-Z]");
Matcher matcher = p.matcher(String.valueOf(c));
if (matcher.matches()) {
} else {
stringBuffer.append(c);
}
}
System.out.println(stringBuffer.toString());
// 输出结果是: 冯凡利&
}
}
三、解决代码
List<CoffeeFlavorCode> idAndFlavorNames = coffeeFlavorCodeMapper.getIdAndFlavorName();
List<CoffeeFlavorCode> list = new ArrayList<>();
for (CoffeeFlavorCode code : idAndFlavorNames){
CoffeeFlavorCode coffeeFlavorCode = new CoffeeFlavorCode();
coffeeFlavorCode.setId(code.getId());
String flavorName = code.getFlavorName();
char[] chars = flavorName.toCharArray();
StringBuffer stringBuffer = new StringBuffer();
for (char c : chars){
Pattern p = Pattern.compile("[a-zA-Z]");
Matcher matcher = p.matcher(String.valueOf(c));
if (matcher.matches()){
}else{
stringBuffer.append(c);
}
}
coffeeFlavorCode.setFlavorName(stringBuffer.toString().trim());
list.add(coffeeFlavorCode);
}
Integer count = 0;
for (CoffeeFlavorCode code : list){
int i = coffeeFlavorCodeMapper.updateCoffeeFlavorNameById(code);
count +=i;
}