在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java正则表达式工具类

2016-12-20 13:16| 发布者: zhangjf| 查看: 550| 评论: 0

摘要: 主要功能有: boolean find() 是否能匹配到至少一个 boolean match() 匹配整个字符串//这个方法其实可以用^$做到 int size() 匹配的字符串个数 String getAll() 获取所有匹配到的字符串 String get(int index) ...
主要功能有:
boolean find() 是否能匹配到至少一个
boolean match() 匹配整个字符串//这个方法其实可以用^$做到
int size() 匹配的字符串个数
String[] getAll() 获取所有匹配到的字符串
String get(int index) 获取匹配到的第N个字符串
String replaceAll(String replacement) 替换所有匹配到的字符串
String replaceFirst(String replacement) 替换第一个匹配到的字符串
String replaceTail(String replacement) 替换最后一个匹配到的字符串
String replace(int index,String replacement) 替换第N个匹配到的字符串

(常用的功能应该就这些了吧)

demo输出结果:
find-->true
size-->4
------下面是get相关------
请不要开玩笑
all-->null
all-->abc
all-->adc
all-->aac
all-->acc
并没有匹配到辣么多
all-->null
------下面是replace相关------
替换所有:诶嘿嘿 诶嘿嘿 诶嘿嘿 诶嘿嘿 abbc
替换第一个:诶嘿嘿 adc aac acc abbc
替换最后一个:abc adc aac 诶嘿嘿 abbc
替换第2个:abc 诶嘿嘿 aac acc abbc
替换第3个:abc adc 诶嘿嘿 acc abbc
替换第10个(并没有10个):abc adc aac acc abbc
------下面是匹配整个字符串------
验证手机号18202020202:true
验证手机号1320202020:false
验证手机号20202020202:false
验证邮箱3164@qq.com:true
验证邮箱www.3164@163.com:true
验证邮箱www.baidu.com:false

测试类:
  1. public class Test {
  2. public static void main(String[] arg){
  3. String res = "abc adc aac acc abbc";
  4. String pattern = "a\wc";
  5. //String pattern = "awc";
  6. //简单用法的示范
  7. int size = ZZUtil.init(res, pattern).size();
  8. boolean find = ZZUtil.init(res, pattern).find();
  9. System.out.println("find-->"+find);
  10. System.out.println("size-->"+size);
  11. //获取匹配到的字符串
  12. System.out.println("------下面是get相关------");
  13. ZZUtil zz = ZZUtil.init(res, pattern);
  14. System.out.println("all-->"+zz.get(-1));
  15. System.out.println("all-->"+zz.get(0));
  16. System.out.println("all-->"+zz.get(1));
  17. System.out.println("all-->"+zz.get(2));
  18. System.out.println("all-->"+zz.get(3));
  19. System.out.println("all-->"+zz.get(4));
  20. //替换字符串
  21. System.out.println("------下面是replace相关------");
  22. String replacement = "诶嘿嘿";
  23. System.out.println("替换所有:"+zz.replaceAll(replacement));
  24. System.out.println("替换第一个:"+zz.replaceFirst(replacement));
  25. System.out.println("替换最后一个:"+zz.replaceTail(replacement));
  26. System.out.println("替换第2个:"+zz.replace(1, replacement));
  27. System.out.println("替换第3个:"+zz.replace(2, replacement));
  28. System.out.println("替换第10个(并没有10个):"+zz.replace(9, replacement));
  29. //实用功能
  30. System.out.println("------下面是匹配整个字符串------");
  31. String p = "1\d{10}";//验证手机号
  32. String e = ".+@\w+.com";//验证邮箱
  33. System.out.println("验证手机号18202020202:"+ZZUtil.init("18202020202", p).match());
  34. System.out.println("验证手机号1320202020:"+ZZUtil.init("1820202020", p).match());
  35. System.out.println("验证手机号20202020202:"+ZZUtil.init("20202020202", p).match());
  36. System.out.println("验证邮箱3164@qq.com:"+ZZUtil.init("3164@qq.com", e).match());
  37. System.out.println("验证邮箱www.3164@163.com:"+ZZUtil.init("www.3164@163.com", e).match());
  38. System.out.println("验证邮箱www.baidu.com:"+ZZUtil.init("www.baidu.com", e).match());
  39. }
  40. }
复制代码

正则表达式工具类
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. /**
  4. * 正则表达式工具类
  5. * @author lu
  6. *
  7. */
  8. public class ZZUtil {
  9. private static ZZUtil zz;
  10. public static ZZUtil init(CharSequence res,String pattern){
  11. if (zz==null||(!res.equals(zz.res)||!pattern.equals(zz.pattern))) {
  12. //在没有实例或内容不同的时候新建一个实例
  13. zz = new ZZUtil(res, pattern);
  14. }
  15. return zz;
  16. }
  17. private CharSequence res;
  18. private String pattern;
  19. private Pattern p;
  20. private Matcher m;
  21. private int size = 0;
  22. private String[] list;//所有匹配到的字符串
  23. private ZZUtil(CharSequence res,String pattern){
  24. this.res = res;
  25. this.pattern = pattern;
  26. p = Pattern.compile(pattern);
  27. m = p.matcher(res);
  28. while(m.find()){
  29. size++;
  30. }
  31. list = new String[size];
  32. m.reset();
  33. for (int i = 0; i < size; i++) {
  34. if(m.find())list[i] = m.group();
  35. }
  36. }
  37. /**是否能匹配到至少一个*/
  38. public boolean find(){
  39. return size>0;
  40. }
  41. /**匹配整个字符串,必须整个字符串满足正则表达式才算true*/
  42. public boolean match(){
  43. return find()&&get(0).equals(res);
  44. }
  45. /**获取所有匹配的字符串个数*/
  46. public int size(){
  47. return size;
  48. }
  49. /**获取所有匹配到的字符串*/
  50. public String[] getAll(){
  51. return list;
  52. }
  53. /**获取匹配到的第N个字符串*/
  54. public String get(int index){
  55. if (index<0) {
  56. System.out.println("请不要开玩笑");
  57. return null;
  58. }
  59. if (index>=size) {
  60. System.out.println("并没有匹配到辣么多");
  61. return null;
  62. }
  63. return list[index];
  64. }
  65. /**替换所有匹配到的字符串*/
  66. public String replaceAll(String replacement){
  67. return m.replaceAll(replacement);
  68. }
  69. /**替换第一个匹配到的字符串*/
  70. public String replaceFirst(String replacement){
  71. return m.replaceFirst(replacement);
  72. }
  73. /**替换最后一个匹配到的字符串*/
  74. public String replaceTail(String replacement){
  75. return replace(size-1, replacement);
  76. }
  77. /**替换第N个匹配到的字符串*/
  78. public String replace(int index,String replacement){
  79. m.reset();
  80. boolean isFind = false;
  81. while(index>=0){
  82. isFind = m.find();
  83. index--;
  84. }
  85. if(isFind){
  86. StringBuffer sb = new StringBuffer();
  87. m.appendReplacement(sb, replacement);
  88. m.appendTail(sb);
  89. return sb.toString();
  90. }
  91. return (String) res;
  92. }
  93. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-8-23 04:25

Copyright 2015-2025 djqfx

返回顶部