2009-09-28 5 views
14
public static String removeNonDigits(final String str) { 
    if (str == null || str.length() == 0) { 
     return ""; 
    } 
    return str.replaceAll("/[^0-9]/g", ""); 
} 

이것은 숫자 만 가져 와서 반환하지만 예상대로하지 않아야합니다! 어떤 제안?모든 비 숫자를 문자열의 빈 문자로 바꿉니다.

+0

String.replaceAll 메소드를 살펴보면 Pattern.compile (regex) .matcher (this) .replaceAll (replacement)을 수행하고있는 것을 알 수 있습니다.이 작업을 많이 수행하면 비효율적입니다. 더 좋은 방법은 컴파일 된 패턴을 상수로 추출하는 것입니다. – kfox

답변

35

자바 "[^0-9]+"

+0

LOL .. 감사합니다 .. :) –

+0

@whyoz : 새로운 질문을하십시오. –

+0

@whyoz : 아무도 의견에 대답을 찾을 수 없습니다. –

15

이 시도하려고 :)있는 Perl되지 않습니다

public static String removeNonDigits(final String str) { 
    if (str == null || str.length() == 0) { 
     return ""; 
    } 
    return str.replaceAll("\\D+", ""); 
} 
+0

당신은 슬래시 (자바를 위해서, 정규식이 아닌)를 벗어나야합니다. "\\ D +" –

+0

Woops, \\ fixed \\ –

+0

고마워요. :) –

2
public String replaceNonDigits(final String string) { 
    if (string == null || string.length() == 0) { 
     return ""; 
    } 
    return string.replaceAll("[^0-9]+", ""); 
} 

이 당신이 원하는 않습니다.

1

이 특수한 경우에는 문자열 위에 작은 루프가있는 것이 좋습니다.

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    char ch = s.charAt(i); 
    if (ch =='0' || ch == '1' || ch == '2' ...) { 
     sb.add(ch); 
    } 
} 
return sb.toString(); 
+4

Character.isDigit (...)는 '(ch =='0 '|| ch =='1 '|| ch =='2 '....)'보다 더 나은 옵션입니다. –

3

enumValue이 입력 문자열 인 경우 다음을 사용하십시오.

enumValue.replaceAll("[^0-9]","") 

문자열을 사용하고 모든 비 숫자 자릿수를 ""로 바꿉니다.

예 : 입력 _126576이며, 출력이 도움이 126576.

희망이 될 것입니다.

관련 문제