Scala String.replaceALL()置換''文字
3724 ワード
Sparkがテキストデータを一括処理する場合、
その結果、次の異常が発生しました.
なぜなら、
または
同じ理屈でStringでsplit()メソッドでもそうです.
'\'
文字のテキストがあり、Json文字列をつづる際にJsonの"
を誤って転義してしまうことがあり、Jsonの解析異常を招くため、'\'
を削除する必要があり、まず次のような書き方を思いついた.val str = """\ \"""
// , !
str.replaceAll("""\""","")
その結果、次の異常が発生しました.
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.compile(Pattern.java:1671)
at java.util.regex.Pattern.(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.replaceAll(String.java:2162)
at com.neusoft.apps.Test$.main(Test.scala:37)
at com.neusoft.apps.Test.main(Test.scala)
なぜなら、
'\'
は正規表現では依然として遷移文字であるが、"""\"""
という表記は、Scalaではエスケープを必要とせずに'\'
文字を表すがjavaである.util.regex.Patternでは、まだエスケープ文字として扱われていますが、エスケープ文字の後ろにエスケープする文字が付いていないので、エラーが表示されます.したがって、エスケープ記号'\'
に'\'
を加えて、もう一度エスケープを行うと文字'\'
に相当します.val str = """\ \"""
str.replaceAll("""\\""","")
または
val str = """\ \"""
str.replaceAll("\\\\","")
同じ理屈でStringでsplit()メソッドでもそうです.