Divisão de string com delimitador


94

No momento, estou tentando dividir uma string 1128-2para que possa ter dois valores separados. Por exemplo, valor1: 1128 e valor2: 2, para que eu possa usar cada valor separadamente. Eu tentei, split()mas sem sucesso. Existe uma maneira específica de Grails lidar com isso ou uma maneira melhor de fazer isso?


Estou curioso por que isso não funcionou com apenas dividir? (a, b) = "ab" .split ("-") funciona bem para mim (e eu acredito que funcionaria em Java também). Eu uso isso o tempo todo. EDIT: Apenas olhando para ele, eles são ligeiramente diferentes - split retorna um array enquanto tokenize retorna um ArrayList. Praticamente a mesma coisa em Groovy, a divisão tem a vantagem de ser facilmente portável para Java. Não acho que tokenize seja um método java em String (a menos que seja um relativamente novo e eu não o vi)
Bill K

Respostas:



61

Como você está ligando split? Funciona assim:

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

10
Acho que é muito útil adicionar um caso extremo que você pode encontrar ao dividir por '.' Caracteres. Portanto, você precisará escapar do ponto se quiser dividir em um ponto literal: String extensionRemoved = filename.split("\\.")[0]; Caso contrário, você está dividindo no regex., Que significa "qualquer caractere". Observe a barra invertida dupla necessária para criar uma única barra invertida na regex.
Exequiel Barrirero

Obrigado por isso. Este método foi escrito para confundir o maior número de pessoas possível.
Dustin Oprea

@ExequielBarrirero Esse comentário salvou minha vida hoje
user3692823

22

def (value1, value2) = '1128-2'.split('-') Deveria trabalhar.

Alguém pode tentar fazer isso no Console do Groovy?

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

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

1
Eu tive problemas com isso, se você quiser dividir em algum tipo de regex chars como. ou *. Você precisa escapar dela, o tokenize funciona nesses casos também.
Chandank

5

Você também pode fazer:

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

//a=1182 b=2


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
     }
   }
}

Olá! Embora este código possa resolver a questão, incluir uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade de sua postagem e provavelmente resultaria em mais votos positivos. Lembre-se de que você está respondendo às perguntas dos leitores no futuro, não apenas da pessoa que está perguntando agora. Por favor edite sua resposta para adicionar explicações e dar uma indicação do que limitações e premissas se aplicam.
Brian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.