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