Division de la chaîne avec un délimiteur


96

J'essaye actuellement de diviser une chaîne de 1128-2sorte que je puisse avoir deux valeurs distinctes. Par exemple, valeur1: 1128 et valeur2: 2, afin que je puisse ensuite utiliser chaque valeur séparément. J'ai essayé split()mais sans succès. Y a-t-il une manière spécifique dont Grails gère cela, ou une meilleure façon de le faire?


Je suis curieux de savoir pourquoi cela n'a pas fonctionné avec juste split? (a, b) = "ab" .split ("-") fonctionne très bien pour moi (et je crois que cela fonctionnerait aussi en Java). Je l'utilise tout le temps. EDIT: Juste en le regardant, ils sont légèrement différents - split renvoie un tableau tandis que tokenize renvoie une ArrayList. Pratiquement la même chose dans Groovy, le split a l'avantage de se connecter facilement à Java, je ne pense pas que tokenize soit une méthode java sur String (à moins que ce soit une méthode assez nouvelle et que je l'ai ratée)
Bill K

Réponses:



62

Comment appelez-vous split? Cela fonctionne comme ceci:

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

10
Je pense qu'il est très utile d'ajouter un cas de bord que vous pourriez rencontrer lors du fractionnement par le '.' carboniser. Vous devrez donc échapper au point si vous voulez diviser sur un point littéral: String extensionRemoved = filename.split("\\.")[0]; Sinon, vous divisez sur l'expression régulière, ce qui signifie "n'importe quel caractère". Notez la double barre oblique inverse nécessaire pour créer une seule barre oblique inverse dans l'expression régulière.
Exequiel Barrirero

Merci pour ça. Cette méthode a été écrite comme pour confondre le plus de gens possible.
Dustin Oprea

@ExequielBarrirero Ce commentaire m'a sauvé la vie aujourd'hui
user3692823 le

23

def (value1, value2) = '1128-2'.split('-') devrait marcher.

Quelqu'un peut-il essayer ceci dans Groovy Console?

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

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

1
J'ai eu un problème avec cela, si vous voulez diviser sur un type de caractères regex comme. ou *. Vous devez y échapper, le tokenize fonctionne également dans ces cas.
chandank le

6

Vous pouvez également faire:

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

salut! Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre publication et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables.
Brian le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.