Java正则表达式协助

Java正则表达式协助,java,regex,maze,Java,Regex,Maze,这项检查仍然失败。我将条件分解,以便测试它们。它在cs=“WWWW”、“WXW”、“wwwwwwwwww”时失败 您似乎误解了括号符号的含义[…]。它创建一个字符类,这意味着它只匹配一个字符,可以是…中的任何字符。(有许多特殊的语法可以更好地控制它可以匹配哪些字符,但这是基本思想。)例如,您的这种模式: ^W[W{10,20}R{1}]W$ 要求字符串长度正好为三个字符;第一个字符是W;第二个字符是W、a{、a1、a0、逗号、a2、a}或R;第三个字符是另一个W 在这种情况下,你真正应该写的只

这项检查仍然失败。我将条件分解,以便测试它们。它在cs=“WWWW”、“WXW”、“wwwwwwwwww”时失败


您似乎误解了括号符号的含义
[…]
。它创建一个字符类,这意味着它只匹配一个字符,可以是
中的任何字符。(有许多特殊的语法可以更好地控制它可以匹配哪些字符,但这是基本思想。)例如,您的这种模式:

^W[W{10,20}R{1}]W$
要求字符串长度正好为三个字符;第一个字符是
W
;第二个字符是
W
、a
{
、a
1
、a
0
、逗号、a
2
、a
}
R
;第三个字符是另一个
W

在这种情况下,你真正应该写的只是:

^W+RW+$
确保字符串除一个
R
外,全部由
W
s组成,并且以
W
s开头和结尾。(您实际上不需要担心
W
s的数量,因为此时您已经确保字符串的长度正好为22个字符。)


编辑后添加:顺便说一句,单元测试很好,但是你的方法有一个很窄的接口——它需要一个字符串,执行一系列验证,只返回
true
false
——因此不适合进行单元测试。如果您的单元测试发现该方法错误地返回了给定字符串的
false
,那么您将几乎没有关于出错原因的信息,因此对查找问题没有多大帮助。更糟糕的是,如果您的单元测试发现该方法正确地返回了给定字符串的
false
,您仍然无法确定它返回的
false
的原因是否正确。因此,它对确保代码正确没有多大帮助。有几种方法可以解决此问题:

  • 您可以为每个验证规则创建一个单独的方法,然后
    checkFileValidLine
    将调用这些方法中的每一个来验证该行。这样,就可以对这些方法进行单元测试(除了对
    checkFileValidLine
    进行粗略的单元测试,以确保它调用了这些方法并返回了正确的结果)。(这是我推荐的方法。)
  • 您可以创建一个助手方法,该方法执行与当前方法相同的验证,但对于有效字符串,它不必返回
    true
    ,对于无效字符串,它可以返回
    null
    ,对于无效字符串,它可以返回
    line.length!=22“
    。然后,您的单元测试可以确保触发了正确的验证规则,而
    checkFileValidLine
    可以只返回
    true
    ,如果帮助器方法返回
    null

您似乎误解了括号符号的含义
[…]
。它创建一个字符类,这意味着它只匹配一个字符,可以是
中的任何字符。(有许多特殊的语法可以更好地控制它可以匹配哪些字符,但这是基本思想。)例如,您的这种模式:

^W[W{10,20}R{1}]W$
要求字符串长度正好为三个字符;第一个字符是
W
;第二个字符是
W
、a
{
、a
1
、a
0
、逗号、a
2
、a
}
R
;第三个字符是另一个
W

在这种情况下,你真正应该写的只是:

^W+RW+$
确保字符串除一个
R
外,全部由
W
s组成,并且以
W
s开头和结尾。(您实际上不需要担心
W
s的数量,因为此时您已经确保字符串的长度正好为22个字符。)


编辑后添加:顺便说一句,单元测试很好,但是你的方法有一个很窄的接口——它需要一个字符串,执行一系列验证,只返回
true
false
——因此不适合进行单元测试。如果您的单元测试发现该方法错误地返回了给定字符串的
false
,那么您将几乎没有关于出错原因的信息,因此对查找问题没有多大帮助。更糟糕的是,如果您的单元测试发现该方法正确地返回了给定字符串的
false
,您仍然无法确定它返回的
false
的原因是否正确。因此,它对确保代码正确没有多大帮助。有几种方法可以解决此问题:

  • 您可以为每个验证规则创建一个单独的方法,然后
    checkFileValidLine
    将调用这些方法中的每一个来验证该行。这样,就可以对这些方法进行单元测试(除了对
    checkFileValidLine
    进行粗略的单元测试,以确保它调用了这些方法并返回了正确的结果)。(这是我推荐的方法。)
  • 您可以创建一个助手方法,该方法执行与当前方法相同的验证,但对于有效字符串,它不必返回
    true
    ,对于无效字符串,它可以返回
    null
    ,对于无效字符串,它可以返回
    line.length!=22“
    。然后,您的单元测试可以确保触发了正确的验证规则,而
    checkFileValidLine
    可以只返回
    true
    ,如果帮助器方法返回
    null
在这里,您将创建一个数组的字符串