web-dev-qa-db-ja.com

Java正規表現value.split( "\\。")、 "バックスラッシュドット"は文字で分割されますか?

私が理解したことから、バックスラッシュドット(_\._)は任意の文字の1文字を意味しますか?したがって、バックスラッシュはエスケープであるため、バックスラッシュバックスラッシュドット(_"\\."_)である必要があります

これは文字列に対して何をしますか?これは、作業中の既存のコードで見ました。私が理解していることから、それは文字列を個々の文字に分割します。 String.toCharArray()の代わりにこれを行う理由。それで、これは文字列を、配列内の各文字列に対して1文字のみを含む文字列の配列に分割しますか?

35
Nap

私の推測では、バックスラッシュ( '\')文字はJava文字列リテラルのエスケープ文字です。 Javaエスケープする必要がある文字列;例.

_Pattern.compile("\.");   // Java syntax error

// A regex that matches a (any) character
Pattern.compile(".");  

// A regex that matches a literal '.' character
Pattern.compile("\\.");  

// A regex that matches a literal '\' followed by one character
Pattern.compile("\\\\.");
_

String.split(String separatorRegex)メソッドは、文字列を正規表現に一致する部分文字列で区切られた部分文字列に分割します。したがって、str.split("\\.")strを単一のリテラル「。」で区切られた部分文字列に分割します。キャラクター。

70
Stephen C

正規表現「。」あなたが述べるように任意の文字と一致します。ただし、エスケープされたドット「\」。リテラルのドット文字に一致します。したがって、192.168.1.1は「\」で分割されます。 {"192"、 "168"、 "1"、 "1"}になります。

あなたの言葉遣いは完全に明確ではありませんが、これはあなたが求めていることだと思います。

7
nall