常用屏蔽字符的处理方法
来源:互联网 发布:淘宝鱼具渔具垂钓用品 编辑:程序博客网 时间:2024/05/08 12:34
一、功能介绍:在不改变原有的字符串格式的基础上,实现对屏蔽字的处理。
二、代码实现:
/** * List<Character> 转字符串的方法 * @param in * @return */ public static String characterListToString(List<Character> in) { String result = ""; for (char b : in) { result += b; } return result; } /** * 从content的startIndex的位置开始向后处理含有mode的子字符串 * @param content * @param startIndex * @param mode * @return */ public static Object[] next(String content, int startIndex, String mode) { Object[] result = new Object[3]; char[] ss = content.toCharArray(); List<Character> all = new ArrayList<>(); List<Character> in = new ArrayList<>(); for (int i = startIndex; i < ss.length; i++) { all.add(ss[i]); if (ss[i] == ' ') {// 空格不做处理(可以扩展到任意不做处理的字符,还需要修改的地方已标记(★)) continue; } in.add(ss[i]); if (in.size() == mode.length()) { String temp = characterListToString(in); if (temp.contains(mode)) { result[0] = true;// 是否含有非法子字符串 result[1] = all;// 在原字符串中的子字符串 result[2] = i;// 结束的位置(作为下次的起始点) return result; } else { while (all.get(0) == ' ') {// here★ all.remove(0); } all.remove(0); in.remove(0); } } } result[0] = false; return result; } /** * 处理content字符串 ,mode为非法字符串 * @param content * @param mode * @return */ public static String charShielding(String content, String mode) { if (mode.length() > content.length()) {// 非法字符长度大于内容时不作处理 return content; } int startIndex = 0; while (1 != 0) {// 循环处理 Object[] result = next(content, startIndex, mode); if ((boolean) result[0]) { @SuppressWarnings("unchecked") List<Character> all = (List<Character>) result[1]; char[] rc = new char[all.size()]; for (int i = 0; i < rc.length; i++) { rc[i] = '*'; } String rs = new String(rc); content = content.replace(characterListToString(all), rs); startIndex = (int) result[2] + 1;// 此次结尾的位置+1 即为下次的开始位置 } else { break; } } return content; } //测试 public static void main(String args[]) { String text = "闲 来垂钓碧溪上,忽 复 乘舟梦日边。闲 来垂钓碧溪上,忽 复乘舟梦日边。"; List<String> disallowStrList = new ArrayList<>(Arrays.asList("日", "忽复乘", "闲来")); for (String str : disallowStrList) { text = charShielding(text, str); } System.out.println(text); }运行结果:*****垂钓碧溪上,********舟梦*边。***垂钓碧溪上,*****舟梦*边。
总结:
突然间需要这个功能就粗糙的写了一个方法. 等有时间可以看看是否可以结合KMP算法对该方法做进一步优化.如有好的建议,留言.
0 0
- 常用屏蔽字符的处理方法
- 屏蔽用户手动输入的代码或特殊字符处理
- C常用的字符处理
- 常用的字符处理函数
- Java中的字符处理常用方法
- 字符过滤的处理方法
- js中字符串处理常用的方法(字符分割、字符拼接、截取字符串、是否包含一个字符串)
- 屏蔽usb的方法- -
- 屏蔽广告的方法
- 处理数据的常用方法
- 图片处理的常用方法
- 常用的字符串处理方法
- 常用的字符串处理方法
- 图像处理的常用方法
- 常用处理兼容性问题的方法
- 关于JavaScript常用的方法(字符篇)
- java中字符、字符串的常用方法
- c#处理转义字符的方法
- 立体视觉的文章,帮助理解基础矩阵F与R、T的关系
- 七夕_Java表白书
- Spinner的简单用法
- 开始写博客
- 上传图片资源到服务器
- 常用屏蔽字符的处理方法
- SAP报表中TOP_OF_PAGE 和END_OF_LIST的使用
- WindowManager removeView抛出异常android.view.WindowLeaked
- 伪函数使用实例
- Android studio之build配置
- MFC连接SQLServer2005数据库
- Qwt源码解读之QwtSystemClock类和QwtSamplingThread类
- Redis Cluster 初探(1) - 集群搭建与扩容
- 设置Session超时