Engine Name 470/485HP and some other text here about 100RPM or torque
のような文字列を指定して、HP
の直前にある数字を抽出します。この例では、メソッドは485
を返す必要があります。数値は整数であることが保証されています(心配するのは-123.45
ではありません)。パターンdigitsHP
は、文字列ごとに1回だけ表示されます。 1234-5678HP
のようなケースが可能であり、5678
が予想される結果です。私は、HPで終わるかどうかを確認する各部分文字列に対して、文字列をスペースで分割する方法を考え出しました。そうであれば、メソッドは最後のブロックを見つけて保存します。これを行う良い方法は何ですか?私はそれが正規表現の1ライナーかもしれないと思う。特定の接頭辞を持つ整数を取得する[Java]
public static void main(String[] args) {
String myStr = "Engine Name 470/485HP and some other text here about 100RPM or torque";
List<Integer> list = parseIntegerWithSuffixIgnoreCase(myStr, "HP");
System.out.println(list.get(0));
}
public static List<Integer> parseIntegerWithSuffixIgnoreCase(String input, String suffix) {
List<Integer> result = new ArrayList<>();
String[] rawStrings = input.split("\\s");
for (String rawString : rawStrings) {
if (rawString.toUpperCase().endsWith(suffix)) {
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(rawString);
List<String> allNumericMatches = new ArrayList<>();
while (m.find()) {
allNumericMatches.add(m.group());
}
Integer value = Integer.parseInt(allNumericMatches.get(allNumericMatches.size() - 1));
result.add(value);
}
}
return result;
}
使用 '\\ \\のD + Bを(キャプチャしないことを意味します?= HP \\ b) 'または[' \\ b(\\ d +)HP \\ b'](http://ideone.com/6im4kH)。 –
なぜあなたは最初に 'split'を使うのですか?あなたの文字列に 'foo123hpbar'のようなデータが含まれている可能性はありますか?' 123hp'は無視されますか? – Pshemo
はい、 'split()'は無礼なようです。おそらく、サンプルの入力が何らかの指示である場合は、少なくとも検索の速度を遅くする可能性があります。 – markspace