35

以下は私のREPL出力です。ここで string.split が機能しない理由がわかりません。

val s = "Pedro|groceries|apple|1.42"
s: java.lang.String = Pedro|groceries|apple|1.42

scala> s.split("|")
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2)
4

3 に答える 3

86

引用符を使用する場合は、正規表現の分割を求めています。 |は「または」文字であるため、正規表現は何も一致しないか、まったく一致しません。したがって、すべてが分割されます。

使用するsplit('|')split("""\|""")、必要なものを取得する必要があります。

于 2012-07-01T18:53:24.523 に答える
8

|操作の論理演算子として使用される特殊な正規表現OR文字です。

java.lang.String#split(String regex);以降 正規表現を使用する場合、文字列を「none OR none」で分割します。これは、正規表現の分割に関するまったく別の専門分野であり、noneは本質的に「すべての文字間」を意味します。

必要なものを取得するには、正規表現パターンを適切にエスケープする必要があります。パターンをエスケープするには、文字の前に特殊文字を追加する必要があります(たとえば、特殊文字\であるため)。実際にはダブルエスケープして、最終的には。になるようにする必要があります。\String\t\rs.split("\\|")

完全なJava正規表現構文については、java.util.regex.Patternjavadocを参照してください。

于 2012-07-01T18:56:34.030 に答える
6

Splitは最初の引数として正規表現を使用するため、呼び出しは「空の文字列または空の文字列」として解釈されます。期待される動作を得るには、パイプ文字「\\|」をエスケープする必要があります。

于 2012-07-01T18:55:56.490 に答える