Розщеплення рядка з роздільником


96

Наразі я намагаюся розділити рядок, 1128-2щоб мати два окремі значення. Наприклад, value1: 1128 і value2: 2, щоб я міг потім використовувати кожне значення окремо. Я намагався, split()але безуспішно. Чи існує певний спосіб, яким Grails це впорається, чи кращий спосіб зробити це?


Мені цікаво, чому це не спрацювало з просто розколом? (a, b) = "ab" .split ("-") чудово працює для мене (І я вважаю, що це буде працювати і на Java). Я постійно ним користуюся. EDIT: Просто дивлячись на це, вони дещо відрізняються - split повертає масив, тоді як tokenize повертає ArrayList. Практично те саме в Groovy, спліт має ту перевагу, що він легко переноситься на Java, я не думаю, що tokenize - це метод Java на String (якщо це не досить новий, і я його пропустив)
Білл К

Відповіді:


173

Спробуйте:

def (value1, value2) = '1128-2'.tokenize( '-' )

31
Це хороше читання на splitvs tokenize tothenew.com/blog/groovy-tokenize-vs-split
Snekse

5
О, і будь обережним, якщо ти розбиваєшся на певних символів як труба |. Вам потрібно буде уникнути обвуглене stackoverflow.com/questions/3842537 / ...
Snekse

2
Так, cos split використовує регулярний вираз
tim_yates

62

Як ти дзвониш split? Це працює так:

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'

10
Я вважаю, що дуже корисно додати крайовий регістр, на який ви могли б натрапити при розділенні на '. char. Отже, вам потрібно буде уникнути крапки, якщо ви хочете розділити буквальну крапку: String extensionRemoved = filename.split("\\.")[0]; інакше ви ділитеся на регулярному виразі., Що означає "будь-який символ". Зверніть увагу на подвійну зворотну скісну риску, необхідну для створення єдиної зворотної скісної риски в регулярному виразі.
Екзекіель Барріреро,

Дякую за це. Цей метод був написаний так, ніби щоб заплутати якомога більше людей.
Дастін

@ExequielBarrirero Цей коментар врятував мені сьогодні життя
user3692823

23

def (value1, value2) = '1128-2'.split('-') повинні працювати.

Хтось може спробувати це в Groovy Console?

def (v, z) =  '1128-2'.split('-')

assert v == '1128'
assert z == '2'

1
У мене була проблема з цим, якщо ви хочете розділити деякі типи символів регулярних виразів, наприклад. або *. Вам потрібно врятуватися, токенізація працює і в тих випадках.
chandank

6

Ви також можете зробити:

Integer a = '1182-2'.split('-')[0] as Integer
Integer b = '1182-2'.split('-')[1] as Integer

//a=1182 b=2

4

split не працює таким чином у groovy. вам потрібно використовувати токенізацію ...

Перегляньте документи:

http://groovy-lang.org/gdk.html#split ()


Спліт насправді працює нормально, розуміння неправильне, будь ласка, дивіться нижче, String [] split_Comma_ByProperty = Stringyouwanttosplit.split (",");
sathya

0
dependencies {
   compile ('org.springframework.kafka:spring-kafka-test:2.2.7.RELEASE') { dep ->
     ['org.apache.kafka:kafka_2.11','org.apache.kafka:kafka-clients'].each { i ->
       def (g, m) = i.tokenize( ':' )
       dep.exclude group: g  , module: m
     }
   }
}

Привіт! Хоча цей код може вирішити питання, включаючи пояснення того, як і чому це вирішує проблему, справді допомогло б поліпшити якість вашої публікації, і, можливо, призведе до збільшення кількості голосів. Пам’ятайте, що ви відповідаєте на запитання читачам у майбутньому, а не лише тому, хто задає зараз. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення та вказати, які обмеження та припущення застосовуються.
Брайан,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.