2012-02-07 18 views
0

文字列に^記号が含まれているかどうかを確認し、その文字列がユーザーにメッセージを表示するかどうかを確認します。Java文字列の^文字を確認する

おかげ

Pattern p = Pattern.compile("[a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("StringGoesHere"); 
boolean b = m.find(); 

if (b){ 
    System.out.println("bad"); 
} else { 
    System.out.println("fine"); 
} 
+0

あなたの質問は何ですか? – simchona

+0

...パターンに追加し、 '\'でエスケープします。 –

答えて

15

正規表現を使用すると、正規表現を使用するために熱望している場合は、単にString.contains()

を使用し、やり過ぎかもしれないが、"\\^"使用:\\がある、単一\を提供します^ charの特別な意味を破っています。

+2

String.indexOf(char)はString.contains(CharSequence)よりも少し速いことがわかります1文字を検索する。 –

+1

@ TheRealBaumann:マイクロ最適化。私は、ほとんどのコンパイラが2つのステートメントを同じように扱うと信じています[文字列は定数のあるリテラルであると仮定します]。 'contains()'が読みやすくなりました。覚えておいてください:最適化はコンパイラのためのものであり、プログラマのための読みやすさです。 – amit

+1

Javaのcontainsの実装は、実際にはString.indexOf(CharSequence.toString())を呼び出します。したがって、StringからCharSequenceへのキャストを処理して、最も一般的な用途でStringに戻します。 –

1
Pattern p = Pattern.compile("\\^"); 
+0

実際には文字列*の先頭に一致します。 –

+0

エスケープされていなければ "行の先頭"ではありませんか? –

+0

(以後編集されていますので、これらのコメントはもう適用されません)式は ''^"'でした。 –

10

理由だけ

String str = "StringGoesHere"; 
if(str.indexOf('^') != -1) 
{ 
    System.out.println("bad"); 
} 
else 
{ 
    System.out.println("fine"); 
} 
1

実際には、最も簡単な答えはなりません:正規表現を使用していない、ただ文字そのものを検索します。

答えは、で正規表現の構文の詳細を参照してください。をエスケープします。

チャプタークラスでは、^は、の最初のシンボルの場合にのみ特別です。 [^a-z]a-z以外のすべてにマッチしながら、そう[a-z^]は、(最初​​の文字として^が否定であるため)、a-zまたは^のいずれかに一致します。

\でエスケープしない限り、文字クラスの外側では、^が行頭に一致します。 Javaのインライン文字列の場合は、"\\^"と書く必要があります。

関連する問題