私は文字列を持っています:
String myString1 = "22223 2342 1 98 333 3 665"
String myString2 = "22323 3 222 34 33 1 98"
1桁、スペース、2桁の値のみを抽出したいと思います。
private static final Pattern p3DigitsGap = Pattern.compile(".*\\b\\d\\s\\d{2}\\b.*");
上記の両方の文字列で、「1 98」を抽出しようとしています。パターンが文字列の最後にある場合、どちらかの側を空白で分割することはできません。
Matcher matcher = p3DigitsGap.matcher(myString1);
if (matcher.find()) {
Log.i("Matcher found");
while (matcher.find() == true) {
Log.i("Matcher is true");
String extract = matcher.group(1);
Log.d("extract: " + extract);
}
}
whileループを削除すると、文字列抽出が読み込まれることはなく、範囲外の例外がスローされます。whileループに追加しましたが、matcher.find()がtrueに等しくありません。
パターンを次のように交換してみました:
Pattern p3DigitsGap = Pattern.compile("[^0-9a-z]\\d\\s\\d{2}[^0-9a-z]");
。*\\bを使用すると問題が発生する可能性があると思いましたが、同じ結果が得られます。
誰かが私がどこで間違っているのか理解するのを手伝ってくれませんか。
前もって感謝します。
回答の編集:上記の正規表現を持つグループを使用して機能するため、Reimeusによる回答を正しいとマークしました。私の元の正規表現を改善する代替ソリューションについては、TimPietzckerによる回答も参照してください。