String Groovy中字符串前缀的比较
这里是Groovy 2.4.x。我有一个方法,它接受两个String Groovy中字符串前缀的比较,string,groovy,String,Groovy,这里是Groovy 2.4.x。我有一个方法,它接受两个字符串,需要对它们进行一些分析 如果两个字符串均以“FIZZ”或“BUZZ”结尾,则应返回false 如果只有一个字符串以“FIZZ”或“BUZZ”结尾,那么它应该返回false 如果两个字符串都以“FIZZ”或“BUZZ”结尾,那么我们继续。。。 在本例中,我们希望在“FIZZ”/“BUZZ”->“前缀”之前提取两个字符串的子字符串 我们现在只想比较两个前缀。如果它们是相同的字符串,则返回true;否则,false 示例: “f
字符串
,需要对它们进行一些分析
- 如果两个字符串均以“
”或“FIZZ
”结尾,则应返回BUZZ
false
- 如果只有一个字符串以“
”或“FIZZ
”结尾,那么它应该返回BUZZ
false
- 如果两个字符串都以“
”或“FIZZ
”结尾,那么我们继续。。。BUZZ
- 在本例中,我们希望在“
”/“FIZZ
”->“前缀”之前提取两个字符串的子字符串BUZZ
- 我们现在只想比较两个前缀。如果它们是相同的字符串,则返回
;否则,true
false
- 在本例中,我们希望在“
- “
”&“foo
”=>bar
(因为两者都以“false
”或“FIZZ
”结尾)BUZZ
- “
”&“foo
”=>barFIZZ
(因为只有1个以“false
”或“FIZZ
”结尾)BUZZ
- “
”&“fooFIZZ
”=>barBUZZ
(因为“false
”!=”foo
”)bar
- “
”&“fooFIZZ
”=>foobusz
(因为“true
”==“foo
”)foo
class FizzBuzzMatcher {
boolean matches(String left, String right) {
boolean matches = false
if(right.endsWith('FIZZ') || right.endsWith('BUZZ')) {
String rightPrefix
rightPrefix = right.subSequence(0, right.indexOf('FIZZ'))
if(rightPrefix.isEmpty()) {
rightPrefix = right.subSequence(0, right.indexOf('BUZZ'))
}
if(left.endsWith('FIZZ') || left.endsWith('BUZZ')) {
String leftPrefix
leftPrefix = left.subSequence(0, left.indexOf('FIZZ'))
if(leftPrefix.isEmpty()) {
leftPrefix = left.subSequence(0, left.indexOf('BUZZ'))
}
if(leftPrefix == rightPrefix) {
matches = true
}
}
}
matches
}
}
…但正如你所看到的,这有点恶心。还有更优雅的解决方案吗?我对OSS LIB(Apache Commons等)持开放态度。您可以尝试使用regexp:
pattern = ~/(.*)(FIZZ|BUZZ)/
def matches(left, right) {
def m1, m2
return (m1 = (left =~ pattern)) && (m2 = (right =~ pattern))
&& (m1[0][1] == m2[0][1])
}
有关regexp运算符的语法,请参见。您可以尝试使用regexp:
pattern = ~/(.*)(FIZZ|BUZZ)/
def matches(left, right) {
def m1, m2
return (m1 = (left =~ pattern)) && (m2 = (right =~ pattern))
&& (m1[0][1] == m2[0][1])
}
有关regexp运算符的语法,请参阅。
xyz
输出看起来应该是false
,然后是true
。这是正确的吗?xyz
输出在看起来应该是false
然后是true
时会令人困惑。这是正确的吗?谢谢@Jeremie B(+1)-我可以假设m1
和m2
是布尔值,并且subprefix
也返回布尔值吗?m1和m2是Matcher-s的实例,是与regexp匹配的结果。谢谢@Jeremie B(+1)-我可以假设m1
和m2
是布尔值,并且subprefix
也返回布尔值吗?m1和m2是Matcher-s的实例,是与regexp匹配的结果。