2011-08-20 5 views
3

splitメソッドを使用してにJavaのStringを分割します。Javaで文字列を*に分割しますか?

String str = "abc*def"; 
String temp[] = str.split("*"); 
System.out.println(temp[0]); 

しかし、このプログラムは私に次のエラーを与える:ここでは、コードです

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Dangling meta character '*' near index 0 * 

私は完璧に動作区切り文字として'\\*'を使用して、コードを少し微調整しました。誰もこの動作を説明できますか(または別の解決策を提案してください)?

私はStringTokenizerを使用しません。

+0

あなたの質問に対する答えを見つけるためにこれまでに何をしていますか? –

+0

私はJavaの多くのAPIで使われている正規表現の概念を読んでみるべきだと思います。 – MozenRath

答えて

5

split()メソッドは、実際には正規表現を受け入れます。 *文字は正規表現内で特別な意味を持ち、単独では表示できません。正規表現に実際の*文字を使用するように指示するには、\文字でエスケープする必要があります。

はこのように、あなたのコードは次のようになります。

String str = "abc*def"; 
String temp[] = str.split("\\*"); 
System.out.println(temp[0]); // Prints "abc" 

\\:あなたにもJava用のスラッシュをエスケープする必要があります。

今後この問題を回避したい場合は、read up on regular expressionsを入力してください。使用できる表現の種類と、エスケープする必要がある文字の両方がわかります。

+0

ruはデリミタとして\ *を使用することを言います..... しかし、datはコンパイル時エラーを返します..... –

+0

私はあなたの区切り文字を "\\ * '' 'は特殊なメタデータ文字なので正規表現は無効です。 – dlev

1

String.split()は正規表現を想定しています。正規表現では、*は特殊な意味を持ちます(その前の文字クラスは0以上)ので、エスケープする必要があります。 \*がそれを達成します。 Java文字列\\を使用しているので、\のエスケープシーケンスであるため、正規表現はちょうど正しく動作する\*になります。

1

スプリットは、スプリットする文字列ではない正規表現を受け入れます。正規表現には*が予約されているので、バックスラッシュでエスケープする必要があります。

具体的には、文字列のバックスラッシュも特殊文字です。改行(\ n)、タブ(\ t)、その他多くの一般的でない文字に使用されます。

javaを書いているので正規表現を書いているので、*文字を2回エスケープする必要があります。したがって '\*'。

関連する問題