Groovy方式有条件地附加到String

时间:2015-12-17 13:10:47

标签: groovy append

有条件地将某些内容附加到字符串的好旧Java方法如下:

if (booleanFlag) {
    myString += "something to append"
}

我能以更加时髦的方式做同样的事吗,理想情况下是一行吗?

6 个答案:

答案 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)