有条件地将某些内容附加到字符串的好旧Java方法如下:
if (booleanFlag) {
myString += "something to append"
}
我能以更加时髦的方式做同样的事吗,理想情况下是一行吗?
答案 0 :(得分:5)
这是一种使用GString closures的常规方式:
>>> def world = false
>>> def people = true
>>>
>>> def message = "Hello${sw -> if (world) sw << ' World'; if (people) sw << ' People'}"
>>>
>>> message
Hello People
>>>
>>> people = false
>>> world = true
>>>
>>> message
Hello World
>>>
>>> world = false
>>> message
Hello
字符串看起来有点长,可以做一些缩进,但groovy shell不允许我分割线。切换到IDE,结果你可以更好地编写字符串(在triple quote strings的帮助下):
def message =
"""Hello${sw ->
if (false) sw << ' World!'
if (false) sw << ' People!'
if (true) sw << ' Groovy!'
}"""
现在那很时髦!
答案 1 :(得分:3)
尝试:
def b = true
def s = 's'
s += b ? 's' : ''
答案 2 :(得分:2)
一个非常Groovy的方法是使用GStrings:
"$myString${booleanFlag ? 'something to append' : ''}"
答案 3 :(得分:2)
以下是创建String.metaClass.when = { it ? delegate : '' }
方法的解决方案:
flag = true
myString = 'foo '
myString += "to append".when flag
assert myString == 'foo to append'
myString = 'foo ' + "to append".when(false)
assert myString == 'foo '
测试:
SQL3229W The field value in row "617" and column "3" is invalid. The row was
rejected. Reason code: "1".
SQL3185W The previous error occurred while processing data from row "617" of
the input file.
答案 4 :(得分:1)
我认为这种模式是一些元编程的好选择。
def myString = 'Hello'
use(StringBuilderCategory) {
assert new StringBuilder(myString).append(true, 'World').toString() == 'HelloWorld'
assert new StringBuilder(myString).append(false, 'World').toString() == 'Hello'
}
class StringBuilderCategory {
static StringBuilder append(StringBuilder builder, boolean condition, String str) {
if(condition) {
builder.append(str)
} else {
builder
}
}
}
我使用了StringBuilder
来避免暗示String
是可变的,但可以在String
添加类似的方法,以便将其归结为此:
use(TheCategory) {
myString = myString.append(booleanFlag, 'something to append')
}
当然可以选择使用元类而不是类别。
答案 5 :(得分:-1)
看起来像我的一行:
import WKWebSQL
.
.
.
var webView = WKWebView(frame: view.frame, configuration: WKWebViewConfiguration())
WKWebSQL.LoadPlugin(webView)