División de cadena con delimitador

96

Actualmente estoy tratando de dividir una cadena 1128-2para poder tener dos valores separados. Por ejemplo, value1: 1128 y value2: 2, de modo que pueda usar cada valor por separado. Lo he intentado split()pero sin éxito. ¿Existe una forma específica en que Grails maneja esto, o una mejor manera de hacerlo?

thehoule64
fuente
Tengo curiosidad por saber por qué esto no funcionó con solo dividir. (a, b) = "ab" .split ("-") funciona bien para mí (y creo que también funcionaría en Java). Lo uso todo el tiempo. EDITAR: Con solo mirarlo, son ligeramente diferentes: split devuelve una matriz mientras que tokenize devuelve una ArrayList. Prácticamente lo mismo en Groovy, la división tiene la ventaja de que se traslada fácilmente a Java, no creo que tokenize sea un método de Java en String (a menos que sea bastante nuevo y me lo perdí)
Bill K

Respuestas:

62

¿Cómo estás llamando split? Funciona así:

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'
ataylor
fuente
10
Creo que es muy útil agregar un caso de borde con el que podría encontrarse al dividir por el '.' carbonizarse. Por lo tanto, deberá escapar del punto si desea dividir en un punto literal: de lo String extensionRemoved = filename.split("\\.")[0]; contrario, estará dividiendo en la expresión regular, que significa "cualquier carácter". Tenga en cuenta la doble barra invertida necesaria para crear una sola barra invertida en la expresión regular.
Exequiel Barrirero
Gracias por eso. Este método fue escrito como para confundir a tanta gente como fuera posible.
Dustin Oprea
@ExequielBarrirero Ese comentario me salvó la vida hoy
user3692823
23

def (value1, value2) = '1128-2'.split('-') Deberia trabajar.

¿Alguien puede probar esto en Groovy Console?

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

assert v == '1128'
assert z == '2'
dmahapatro
fuente
1
Tuve un problema con eso, si quieres dividir en algún tipo de caracteres regex como. o *. Necesita escapar de él, la tokenización también funciona en esos casos.
chandank
6

También puedes hacer:

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

//a=1182 b=2
davidddp
fuente
4

split no funciona de esa manera en groovy. tienes que usar tokenize ...

Ver los documentos:

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

Angstrom Beebe
fuente
split funciona bien en realidad, el entendimiento es incorrecto, por favor vea lo siguiente, 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
     }
   }
}
q era
fuente
¡Hola! Si bien este código puede resolver la pregunta, incluir una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación y probablemente resultaría en más votos a favor. Recuerde que está respondiendo la pregunta a los lectores en el futuro, no solo a la persona que pregunta ahora. Por favor, editar su respuesta para agregar explicaciones y dar una indicación de lo que se aplican limitaciones y supuestos.
Brian