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?

thehoule64
fonte
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'
Ataylor
fonte
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'
dmahapatro
fonte
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
Davidddp
fonte
4

dividir não funciona assim no descolado. você tem que usar tokenize ...

Veja a documentação:

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

Angstrom Beebe
fonte
a divisão funciona bem, na verdade, o entendimento está errado, por favor, veja a seguir, 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
     }
   }
}
qwas
fonte
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