【发布时间】:2016-02-11 18:44:21
【问题描述】:
这里是 Groovy 2.4.x。我有一个方法需要两个Strings,需要对它们做一些分析。
- 如果两个字符串都不以“
FIZZ”或“BUZZ”结尾,那么它应该返回false - 如果只有一个字符串以“
FIZZ”或“BUZZ”结尾,那么它应该返回false - 如果两个字符串都以“
FIZZ”或“BUZZ”结尾,那么我们继续...- 在这种情况下,我们要提取两个字符串的子字符串之前 "
FIZZ"/"BUZZ" -> "prefixes" - 我们现在想简单地比较两个前缀。如果它们是相同的字符串,则返回
true;否则,false
- 在这种情况下,我们要提取两个字符串的子字符串之前 "
例子:
- "
foo" & "bar" =>false(因为两者都不以“FIZZ”或“BUZZ”结尾) - "
foo" & "barFIZZ" =>false(因为只有 1 以 "FIZZ" 或 "BUZZ" 结尾) - “
fooFIZZ”&“barBUZZ”=>false(因为“foo”!=“bar”) - “
fooFIZZ”&“fooBUZZ”=>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 库(Apache Commons 等)持开放态度。
【问题讨论】:
-
xyz的输出令人困惑,因为它看起来应该是false,然后是true。对吗?