【字符串操作-正则】-文本字符串中多余重复出现的标点符号保留最后一个标点符号
问题描述
因为人工填写和复制的原因,或者内容拼接导致会出现某些标点符号重复出现,或者出现多余标点符号,因此写了这样的方法操作字符串;
主要代码和说明
/**
* @author newzhong
* @version 1.0.0
* @since JDK 1.8
* @param str 需要校验的字符串
* @return String 校验后的字符串
*/
public static String delRepeatSym1 (String str) {
if (StringUtils.isEmpty(str)) {
return "";
}
// 可以根据要求添加 标点符号
Pattern compile = compile("[,。!\\”\\?]");
StringBuffer content = new StringBuffer();
// 下标变更
AtomicInteger index = new AtomicInteger(0);
char[] contentChars = str.toCharArray();
for (int i = 0; i < contentChars.length; i++) {
String curStr = String.valueOf(contentChars[i]);
Matcher matcher = compile.matcher(curStr);
boolean del = matcher.find();
content.append(curStr);
// 是符号 不是第一个
if(del && i > 0){
// 上一个
String strPre = String.valueOf(contentChars[i - 1]);
Matcher matcherPre = compile.matcher(strPre);
// 重复了
if (matcherPre.find()){
content.deleteCharAt(i - index.getAndIncrement());
}
}
}
return content.toString();
}
public static void main(String[] args) {
String content = "欢迎阅读【字符串操作-正则】-文本字符串中多余重复出现的标点符号截取最后一个的文章,,多多点赞。。谢谢!!。";
String result = delRepeatSym1(content);
System.out.println(result);
}
结果:
总结
- 用到真正表达式配置标点符号
- 通过
StringBuffer
在遍历中重新拼接,没有通过记录重复的下标,再次遍历del重复的数据 - 注意重新拼接,
deleteCharAt
后的越界问题