6

|バー区切りでテキストの束を分割しようとしています。123.123.123.123|000.000.000.000各 IP アドレス ブロックに。ただし、各数値は ではなく分割され|ます。

scala> "123.123.123.123|000.000.000.000".split("|")
res30: Array[java.lang.String] = Array("", 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, |, 0, 0, 0, ., 0, 0, 0, ., 0, 0, 0, ., 0, 0, 0)

scala> "123.123.123.123".split("|")
res33: Array[java.lang.String] = Array("", 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3)

だから私は区切り記号を入れてChar、それは私が意図したものを示しています。

scala> "123.123.123.123|000.000.000.000".split('|')
res31: Array[String] = Array(123.123.123.123, 000.000.000.000)

scala> "123.123.123.123".split('|')
res32: Array[String] = Array(123.123.123.123)

なぜ1つのキャラクターが大きな違いを生むのですか?

Scala doc とStringLike.scalaを読みましたが、答えがありません。

def split(separators: Array[Char]): Array[String]
def split(separator: Char): Array[String]

ありがとう。

4

2 に答える 2

12

Split メソッドは、文字列または文字のいずれかを受け入れます。文字列を使用すると、正規表現と "|" として解釈されます。正規表現の「または」として扱われます-あなたの場合、「すべての文字が独自のビンに移動します」に戻ります。それをエスケープして、生の区切り文字を取得します。

"123.123.123.123|000.000.000.000".split("\\|")
res1: Array[String] = Array(123.123.123.123, 000.000.000.000)

文字区切りはそのまま解釈されるため、手間をかけずに目的の結果が得られます

于 2013-05-27T07:17:37.413 に答える
2

om-nom-nom が正しく言及されているように (ただし、例は提供していません)、文字 ( single で囲まれている') も有効であることに注意してください。

"123.123.123.123|000.000.000.000".split('|')

これはより明白で読みやすいと思います。また、正規表現パーサーを呼び出す必要がないため、これは高速であると想定しています。しかし、それはもちろん憶測であり、不必要なマイクロ最適化でもあります。

于 2013-05-27T17:26:09.947 に答える