35

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

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

4

2 に答える 2

71

バックスラッシュ ('\') 文字が 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キャラクター。

于 2009-09-26T02:59:06.480 に答える
7

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

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

于 2009-09-26T02:48:31.993 に答える