Gegeben Strings wie Engine Name 470/485HP and some other text here about 100RPM or torque
und ich möchte eine Zahl direkt vor HP
extrahieren. In dieser Beispielmethode sollte 485
zurückgegeben werden. Zahlen sind garantiert ganze Zahlen (keine -123.45
um sich Sorgen zu machen). Das Muster digitsHP
erscheint nur einmal pro String. Fälle wie 1234-5678HP
sind möglich und 5678
ist ein erwartetes Ergebnis. Ich habe eine Methode entwickelt, die Strings nach Leerzeichen aufteilt und für jeden Teilstring prüft, ob es mit HP endet. Wenn dies der Fall ist, findet die Methode den letzten Nummernblock und speichert ihn. Was ist ein besserer Weg, dies zu tun? Ich vermute, es könnte ein Regex-Einzeiler sein.Erhalte eine Ganzzahl mit einem bestimmten Präfix [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;
}
Verwenden '\\ b \\ + d nicht erfassen (? = HP \\ b) 'oder [' \\ b (\\ d +) HP \\ b'] (http://ideone.com/6im4kH). –
Warum haben Sie sich entschieden, 'split' zu verwenden? Ist es möglich, dass Ihr String Daten wie 'foo123hpbar' enthält? In diesem Fall sollte' 123hp' ignoriert werden? – Pshemo
Ja, die 'split()' scheint im besten Fall unentgeltlich. Vermutlich wird es die Suche verlangsamen, zumindest wenn die Beispieleingabe ein Hinweis ist. – markspace