Groovy字符串拼接

7

当前代码:

row.column.each(){column ->
    println column.attributes()['name']
    println column.value()
}

Column是一个具有单个属性和单个值的Node。我正在解析XML以将插入语句输入到Access中。是否有一种Groovy方式来创建以下结构化语句:

Insert INTO tablename (col1, col2, col3) VALUES (1,2,3)

我目前将属性和值分别存储到不同的数组中,然后将它们弹出并按正确的顺序排列。

2个回答

19
我认为在Groovy中可以比当前被接受的答案更容易。 collect和join方法就是为这种事情而建的。 join自动处理连接并且不会在字符串末尾放置逗号。
我认为在Groovy中可以比当前被接受的答案更容易。collect和join方法就是为这种事情而建的。join自动处理连接并且不会在字符串末尾放置逗号。
def names = row.column.collect { it.attributes()['name'] }.join(",")
def values = row.column.collect { it.values() }.join(",")
def result = "INSERT INTO tablename($names) VALUES($values)"

1
这个完美地运行了!因为我的设置是table.row.column,所以我使用${table.attributes()['name']}来检索表名。 - XanderLynn

0
你可以使用两个 StringBuilder。类似这样的代码,粗略且未经测试:
def columns = new StringBuilder("Insert INTO tablename(")
def values = new StringBuilder("VALUES (")
row.column.each() { column ->
    columns.append(column.attributes()['name'])
    columns.append(", ")
    values.append(column.value())
    values.append(", ")
}
// chop off the trailing commas, add the closing parens
columns = columns.substring(0, columns.length() - 2)
columns.append(") ")
values = values.substring(0, values.length() - 2)
values.append(")")

columns.append(values)
def result = columns.toString()

您可以在这里找到各种Groovy字符串操作符。


1
在Groovy中,您可以使用'<<'而不是"append()"将内容附加到StringBuilder中,这使得代码更易读(在我看来)。 - Dónal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接