자바의 문자열에서 숫자를 추출합니다.
나는 자바다String
물건.나는 그것으로부터 유일한 숫자를 추출할 필요가 있다.나는 예를 들어 보죠:
"123-456-789"
나는 되고 싶다."123456789"
있는 자리를 추출하는 라이브러리 함수 있나요?
대해 대답 감사합니다.전에 나는 이것들을 해 보면 추가 llibraries 설치하셔야 해 알아야 한다?
당신과 non-digits을 삭제하regex 사용할 수 있다.
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
그건 그렇고:그것은 0-9제외하고 많은 다른 chars을 나는 Character.isDigit(ch)사용되지 않았다.
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();
}
사용 구글 궈바:
CharMatcher.inRange('0','9').retainFrom("123-456-789")
업데이트:
Precomputed CharMatcher를 사용하여 더 성능이 향상됩니다.
CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed();
ASCII_DIGITS.retainFrom("123-456-789");
input.replaceAll("[^0-9?!\\.]","")
이것은 소수 점을 무시하겠지요.
사람들:로서 입력을 가지고 있다.445.3kg
출력할 것이다445.3
.
사용 구글 궈바:
CharMatcher.DIGIT.retainFrom("123-456-789");
CharMatcher고 꽤 흥미로운 사용, 예를 들면 다음을 수행합니다:plug-able 있다.
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);
}
public class FindDigitFromString
{
public static void main(String[] args)
{
String s=" Hi How Are You 11 ";
String s1=s.replaceAll("[^0-9]+", "");
//*replacing all the value of string except digit by using "[^0-9]+" regex.*
System.out.println(s1);
}
}
출력:11
나는 코드 숀 패트릭 플로이드에 의해 좀 나는면 최대 성능을 다시 쓰도록 고무시켰다.
public static String stripNonDigitsV2( CharSequence input ) {
if (input == null)
return null;
if ( input.length() == 0 )
return "";
char[] result = new char[input.length()];
int cursor = 0;
CharBuffer buffer = CharBuffer.wrap( input );
while ( buffer.hasRemaining() ) {
char chr = buffer.get();
if ( chr > 47 && chr < 58 )
result[cursor++] = chr;
}
return new String( result, 0, cursor );
}
저는 매우 긴 최소한의 숫자와 결과와 String:시험 Performance 한다.
- 원본 코드 25,5% 느리다.
- 궈바 접근은 2.53배 느려질 수 있다.
- 대해 낙제점과 규칙적인 표현은 3-3.5배 느려질 수 있다.
- 단지 D와 함께 규칙적인 표현은 25+배 느려질 수 있다.
그것이 얼마나 오래 이게 문자열에 달려 있다.문자열은 겨우 6수는 50% 느린 구아바고 1번씩 느리regexp을 포함하고 있다.
코틀린과 람다 표현을 사용하면 다음과 같이 할 수 있다.
val digitStr = str.filter { it.isDigit() }
사용할 수 있다str.replaceAll("[^0-9]", "");
전화번호 +9 (987) 124124에 대한 코드를 확정했다.
유니코드 문자는 4바이트를 차지한다.
public static String stripNonDigitsV2( CharSequence input ) {
if (input == null)
return null;
if ( input.length() == 0 )
return "";
char[] result = new char[input.length()];
int cursor = 0;
CharBuffer buffer = CharBuffer.wrap( input );
int i=0;
while ( i< buffer.length() ) { //buffer.hasRemaining()
char chr = buffer.get(i);
if (chr=='u'){
i=i+5;
chr=buffer.get(i);
}
if ( chr > 39 && chr < 58 )
result[cursor++] = chr;
i=i+1;
}
return new String( result, 0, cursor );
}
코드:
public class saasa {
public static void main(String[] args) {
// TODO Auto-generated method stub
String t="123-456-789";
t=t.replaceAll("-", "");
System.out.println(t);
}
import java.util.*;
public class FindDigits{
public static void main(String []args){
FindDigits h=new FindDigits();
h.checkStringIsNumerical();
}
void checkStringIsNumerical(){
String h="hello 123 for the rest of the 98475wt355";
for(int i=0;i<h.length();i++) {
if(h.charAt(i)!=' '){
System.out.println("Is this '"+h.charAt(i)+"' is a digit?:"+Character.isDigit(h.charAt(i)));
}
}
}
void checkStringIsNumerical2(){
String h="hello 123 for 2the rest of the 98475wt355";
for(int i=0;i<h.length();i++) {
char chr=h.charAt(i);
if(chr!=' '){
if(Character.isDigit(chr)){
System.out.print(chr) ;
}
}
}
}
}
참조URL: https://stackoverflow.com/questions/4030928/extract-digits-from-a-string-in-java
'programing' 카테고리의 다른 글
다른 모듈 작업에서 vuex 모듈 상태 가져오기 (0) | 2022.05.17 |
---|---|
어떻게 개체의 Vuex 주에 있는이 그 부동산에 대한 구성 요소에서 가치를 할당할? (0) | 2022.05.17 |
그리고 미국의 광고 대행사 뷰 라우터와 Vuex를 사용할 때 액세스 토큰을 새로 고치는지 확인합니다. (0) | 2022.05.17 |
어떻게 자바에서 데이트에는 currentTimeMillis를 변환하는 데? (0) | 2022.05.17 |
Android 앱에서 인터넷 연결 확인을 위한 브로드캐스트 수신기 (0) | 2022.05.17 |