Java 简化正则表达式的使用

时间:2022-11-22 18:01:59

使用

RegexString.with(string).pattern(pattern).start() + 后续操作(matches,find或者是replace)

源码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com;
 
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * @author YouXianMing1987@iCloud.com 用于简化处理正则表达式
 */
public class RegexString {
 
  private String string;
  private Pattern pattern;
  private Matcher matcher;
 
  ////////////////////// Constructor //////////////////////
 
  /**
   * 正则表达式对象
   *
   * @param str
   *      初始化用的字符串
   */
  public RegexString(String str) {
    setString(Objects.requireNonNull(str));
  }
 
  ////////////////////// Normal Method //////////////////////
 
  /**
   * 设置正则表达式的pattern
   *
   * @param regex
   *      正则表达式语句
   * @return RegexString
   */
  public RegexString pattern(String regex) {
    setPattern(Pattern.compile(regex));
    return this;
  }
 
  /**
   * 设置正则表达式的pattern
   *
   * @param regex
   *      正则表达式语句
   * @param flags
   *      正则表达式flag值
   * @return RegexString
   */
  public RegexString pattern(String regex, int flags) {
    setPattern(Pattern.compile(regex, flags));
    return this;
  }
 
  /**
   * 正则表达式对象开始匹配(设置完pattern后需要自行此语句才能做后续操作)
   *
   * @return RegexString
   */
  public RegexString start() {
    setMatcher(pattern.matcher(string));
    return this;
  }
 
  /**
   * 进行文本替换
   *
   * @param replacement
   *      用来替换的文本
   * @return 替换后的字符串
   */
  public String replace(String replacement) {
    return getMatcher().replaceAll(replacement);
  }
 
  /**
   * 判断是否匹配(一次性匹配全部文本,不分步)
   *
   * @return 匹配了返回true,没有匹配返回false.
   */
  public boolean matches() {
    return getMatcher().matches();
  }
 
  /**
   * 判断是否匹配(分步匹配文本,请结合while循环使用)
   *
   * @return 找到了返回true,没有找到返回false.
   */
  public boolean find() {
    return getMatcher().find();
  }
 
  /**
   * find()操作成功后,可以通过matchString()获取匹配的字符串
   *
   * @return 匹配的字符串
   */
  public String matchString() {
    return getMatcher().group();
  }
 
  /**
   * find()操作成功后,可以通过matchStart()获取匹配的起始位置
   *
   * @return 匹配的起始位置
   */
  public int matchStart() {
    return getMatcher().start();
  }
 
  /**
   * find()操作成功后,可以通过matchEnd()获取匹配的结束位置
   *
   * @return 匹配的起始位置
   */
  public int matchEnd() {
    return getMatcher().end();
  }
 
  ////////////////////// Static Method //////////////////////
 
  /**
   * [静态方法] 便利构造器
   *
   * @param str
   *      初始化用的字符串
   * @return RegexString
   */
  public static RegexString with(String str) {
    return new RegexString(str);
  }
 
  ////////////////////// Getter & Setter //////////////////////
 
  public String getString() {
    return string;
  }
 
  public void setString(String string) {
    this.string = string;
  }
 
  public Pattern getPattern() {
    return pattern;
  }
 
  public void setPattern(Pattern pattern) {
    this.pattern = pattern;
  }
 
  public Matcher getMatcher() {
    return matcher;
  }
  public void setMatcher(Matcher matcher) {
    this.matcher = matcher;
  }
}

示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com;
 
public class Main {
 
  public static void main(String args[]) {
 
    // 查找文本
    {
      String src = "This is my small example string which I'm going to use for pattern matching.";
      RegexString string = RegexString.with(src).pattern("\\w+").start();
      while (string.find()) {
        System.out.println(string.matchStart() + "," + string.matchEnd() + " : " + string.matchString());
      }
    }
 
    // 匹配
    {
      String src = "This is my small example string which I'm going to use for pattern matching.";
      if (RegexString.with(src).pattern("^This.+$").start().matches()) {
        System.out.println("Yes");
      }
    }
 
    // 替换文本
    {
      String src = "This is my small example string which I'm going to use for pattern matching.";
      System.out.println(RegexString.with(src).pattern("\\w+").start().replace("Regex"));
    }
    // 去掉字符串首尾的空格,以及字符串中间多余的字符串
    {
      String src = "  This  is  my small example string  which I'm  going to  use for pattern matching.   ";
      String tmp = RegexString.with(src).pattern("^\\s+|\\s+$").start().replace("");
      String des = RegexString.with(tmp).pattern("\\s+").start().replace(" ");
      System.out.println("\"" + des + "\"");
    }
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!

原文链接:http://www.cnblogs.com/YouXianMing/p/6782423.html