Groovy String Конкатенация - PullRequest
6 голосов
/ 18 июня 2009

Текущий код:

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

Column - это Node, который имеет один атрибут и одно значение. Я разбираю XML для ввода создания операторов вставки в доступе. Есть ли Groovy способ создания следующего структурированного оператора:

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

В настоящее время я храню атрибут и значение в отдельных массивах, а затем помещаю их в правильном порядке.

Ответы [ 2 ]

18 голосов
/ 19 июня 2009

Я думаю, что это может быть намного проще, чем принятый в настоящее время ответ. Методы сбора и соединения созданы для такого рода вещей. 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)"
0 голосов
/ 18 июня 2009

Вы можете просто использовать два 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 здесь .

...