2016-09-27 5 views
0

私はブラウザの言語を読み込み、返された長い文字列からxx-XX(例:en-US)の最初の出現を取得しようとしています。Javaパターンとマッチャーはランダムに壊れます

final String delimiter = "([a-z]{2})-([a-z]{2})"; 
final String language = (request.getHeader("Accept-Language")).toLowerCase(); 
String locale = ""; 

Pattern pattern = Pattern.compile(delimiter); 
Matcher matcher = pattern.matcher(language); 

if(matcher.find()) { 
    locale = matcher.group(0); 
} 

文字列localeこのような値を取得します。

de-DE,de;q=0.8,en-AU;q=0.6,en;q=0.4,en-US;q=0.2,en-GB;q=0.2,en-NZ;q=0.2,fr-FR;q=0.2,fr;q=0.2,en-CA;q=0.2

私は 'DE-DE' は、この場合には、最初の1を取得しようとしています。私が理解できない理由のためにそれが壊れるいくつかのランダムな時間。アプリケーション自体が壊れます。ビルドはうまく動作します。私はこのコードを追跡しました(他のページはすべて削除しました)。問題が何であるかまだ分かりません。任意のヒント?

+1

例外はありますか?私の推測では、それはNullPointerExceptionになります - "Accept-Language"は時々設定されていませんか? –

+1

「いくつかのランダムな時間」私は本当にランダムではないと確信しています。それが壊れたときの入力は何ですか? ( 'Accept-Language'ヘッダがなければ、NullPointerExceptionを取得することがあります。 –

+0

また、 'de-DE'を見つけようとするなら、あなたのキャラクタークラスに' A-Z'を含める必要があります。 –

答えて

1

は、このような正規表現についてどう:

([a-z]{2})(\-[A-Z]{2})? 

その場合には、第二の部分はオプションです。

This pageは正規表現のテストに役立ちます。

関連する問題