区切り文字で文字列を分割する


94

私は現在、1128-22つの別個の値を持つことができるように文字列を分割しようとしています。たとえば、value1:1128とvalue2:2なので、各値を個別に使用できます。私は試しましsplit()たが、成功しませんでした。Grailsがこれを処理する特定の方法、またはそれを行うより良い方法はありますか?


これが分割だけでは機能しないのはなぜですか?(a、b)= "ab" .split( "-")は私には問題なく動作します(Javaでも動作すると思います)。いつも使っています。編集:それを見るだけで、それらは少し異なります.splitizeは配列を返し、tokenizeはArrayListを返します。Groovyとほぼ同じですが、分割にはJavaへの移植が容易であるという利点があります。tokenizeはStringのjavaメソッドではないと思います(かなり新しいもので、私がそれを逃した場合を除きます)
Bill K

回答:



61

どう呼びsplitますか?それはこのように動作します:

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

10
「。」で分割するときに遭遇する可能性があるエッジケースを追加すると非常に便利だと思います。チャー。したがって、リテラルドットで分割する場合は、ドットをエスケープする必要があります。 String extensionRemoved = filename.split("\\.")[0]; それ以外の場合は、「任意の文字」を意味する正規表現。で分割します。正規表現で単一の円記号を作成するために必要な二重円記号に注意してください。
Exequiel Barrirero

それをありがとう。このメソッドは、できるだけ多くの人々を混乱させるように書かれました。
ダスティンオプ

@ExequielBarrireroそのコメントは私の人生を今日救った
user3692823

22

def (value1, value2) = '1128-2'.split('-') うまくいくはずです。

誰かがこれをGroovyコンソールで試してみることはできますか?

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

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

1
のような正規表現の文字のタイプで分割したい場合、私はそれに問題がありました。または*。あなたはそれをエスケープする必要があります、tokenizeはそれらの場合にも機能します。
チャンダンク

5

次のこともできます:

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

こんにちは!このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、投票数が増える可能性があります。あなたが今尋ねている人だけでなく、将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。
ブライアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.