Engine Name 470/485HP and some other text here about 100RPM or torque
과 같은 문자열이 있고 HP
앞에 오른쪽 숫자를 추출하고 싶습니다. 이 예제에서 메서드는 485
을 반환해야합니다. 숫자는 정수로 보장됩니다 (걱정할 필요가 없습니다 -123.45
). 패턴 digitsHP
은 문자열 당 한 번만 나타납니다. 1234-5678HP
과 같은 사례가 발생할 수 있으며 5678
이 예상되는 결과입니다. 공백으로 문자열을 분할하는 방법을 생각해 냈습니다. 각 문자열은 HP로 끝나는 지 검사합니다. 그럴 경우 메서드는 마지막 숫자 블록을 찾아 저장합니다. 이 작업을 수행하는 더 좋은 방법은 무엇입니까? 나는 그것이 정규 표현식일지도 모른다라고 생각한다. 당신의 정규식에 HP
추가특정 접두사가있는 정수 가져 오기 [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 개 +이 그룹을 캡처하지 수단 문자열
\w+
제로 이상의 비 단어 문자의 끝을 의미 ? = HP \\ b)'또는 ['\\ b (\\ d +) HP \\ b'] (http://ideone.com/6im4kH). –왜 처음에는'split'을 사용하기로 결정 했습니까? '123hp'가 무시되어야하는'foo123hpbar'와 같은 데이터를 문자열에 포함 할 수 있습니까? – Pshemo
예, 'split()'은 기껏해야 무상으로 보입니다. 최소한 샘플 입력이 어떤 표시 일지라도 검색 속도를 느리게 할 가능성이 있습니다. – markspace