# 测试

本节定义了一个可重用的测试工具, RegexTestHarness.java 用于探索此 API 支持的正则表达式结构。 运行此代码的命令是 java RegexTestHarness; 如果没有在命令行中输入参数。应用程序反复循环, 提示用户正则表达式和输入字符串。使用此测试工具是可选的,但您可能会发现方便查看以下页面中讨论的测试用例。

public class RegexTestHarness {
    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.err.println("No console.");
            System.exit(1);
        }
        while (true) {

            Pattern pattern =
                    Pattern.compile(console.readLine("%nEnter your regex: "));

            Matcher matcher =
                    pattern.matcher(console.readLine("Enter input string to search: "));

            boolean found = false;
            while (matcher.find()) {
                console.format("I found the text" +
                                       " \"%s\" starting at " +
                                       "index %d and ending at index %d.%n",
                               matcher.group(),
                               matcher.start(),
                               matcher.end());
                found = true;
            }
            if (!found) {
                console.format("No match found.%n");
            }
        }
    }

    @Test
    public void test() {
        //  在文本中:这里的列子是: 查找 ab 或则 b
        regexTest("a*b", "abxbbbbbbb");
    }

    public static void regexTest(String regex, String input) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        boolean found = false;
        while (matcher.find()) {
            // 索引 包含头 不包含尾
            System.out.format("我发现文本中的" +
                                      " \"%s\" " +
                                      "在开始索引 %d 和 结束索引 %d.%n",
                              matcher.group(),
                              matcher.start(),
                              matcher.end());
            found = true;
        }
        if (!found) {
            System.out.format("No match found.%n");
        }
    }
}
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

为了方便在 ide 中使用,我编写了 regexTest 函数 和 test 测试例子。输出结果如下:

我发现文本中的 "ab" 在开始索引 0 和 结束索引 2.
我发现文本中的 "b" 在开始索引 3 和 结束索引 4.
我发现文本中的 "b" 在开始索引 4 和 结束索引 5.
我发现文本中的 "b" 在开始索引 5 和 结束索引 6.
我发现文本中的 "b" 在开始索引 6 和 结束索引 7.
我发现文本中的 "b" 在开始索引 7 和 结束索引 8.
我发现文本中的 "b" 在开始索引 8 和 结束索引 9.
我发现文本中的 "b" 在开始索引 9 和 结束索引 10.
1
2
3
4
5
6
7
8