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?

thehoule64
la source
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'
ataylor
la source
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'
dmahapatro
la source
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
davidddp
la source
4

split ne fonctionne pas de cette façon dans groovy. vous devez utiliser tokenize ...

Voir la documentation:

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

Angstrom Beebe
la source
split fonctionne bien en fait, la compréhension est erronée, veuillez voir ci-dessous, 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
la source
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