Java String
객체가 있습니다. 숫자 만 추출해야합니다. 예를 들어 보겠습니다.
"123-456-789"
내가 원하는 "123456789"
숫자 만 추출하는 라이브러리 함수가 있습니까?
답변 주셔서 감사합니다. 시험해보기 전에 추가 llibraries를 설치해야하는지 알아야합니까?
답변
정규식을 사용하고 숫자가 아닌 숫자를 삭제할 수 있습니다.
str = str.replaceAll("\\D+","");
답변
더 자세한 해결책은 다음과 같습니다. 덜 우아하지만 아마도 더 빠를 것입니다.
public static String stripNonDigits(
final CharSequence input /* inspired by seh's comment */){
final StringBuilder sb = new StringBuilder(
input.length() /* also inspired by seh's comment */);
for(int i = 0; i < input.length(); i++){
final char c = input.charAt(i);
if(c > 47 && c < 58){
sb.append(c);
}
}
return sb.toString();
}
테스트 코드 :
public static void main(final String[] args){
final String input = "0-123-abc-456-xyz-789";
final String result = stripNonDigits(input);
System.out.println(result);
}
산출:
0123456789
BTW : Character.isDigit (ch) 는 0-9를 제외한 많은 다른 문자를 허용하기 때문에 사용하지 않았습니다 .
답변
public String extractDigits(String src) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < src.length(); i++) {
char c = src.charAt(i);
if (Character.isDigit(c)) {
builder.append(c);
}
}
return builder.toString();
}
답변
Google Guava 사용 :
CharMatcher.inRange('0','9').retainFrom("123-456-789")
최신 정보:
사전 계산 된 CharMatcher를 사용 하면 성능을 더욱 향상시킬 수 있습니다
CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed();
ASCII_DIGITS.retainFrom("123-456-789");
답변
input.replaceAll("[^0-9?!\\.]","")
소수점을 무시합니다.
예를 들면 : 당신은 같은 입력이 있으면 445.3kg
출력이됩니다 445.3
.
답변
Google Guava 사용 :
CharMatcher.DIGIT.retainFrom("123-456-789");
CharMatcher는 플러그 가능하고 사용하기 매우 흥미 롭습니다. 예를 들어 다음을 수행 할 수 있습니다.
String input = "My phone number is 123-456-789!";
String output = CharMatcher.is('-').or(CharMatcher.DIGIT).retainFrom(input);
출력 == 123-456-789
답변
정규식을 사용하여 요구 사항에 맞 춥니 다.
String num,num1,num2;
String str = "123-456-789";
String regex ="(\\d+)";
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
num = matcher.group();
System.out.print(num);
}