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?


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'

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'

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


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

¡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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.