Programing

문자열에서 숫자 추출-StringUtils Java

lottogame 2020. 12. 28. 07:41
반응형

문자열에서 숫자 추출-StringUtils Java


문자열이 있고 문자열에서 (유일한) 숫자 시퀀스를 추출하고 싶습니다.

예 : helloThisIsA1234Sample. 나는 1234를 원한다

숫자 시퀀스는 문자열 내에서 한 번만 발생하지만 동일한 위치에서는 발생하지 않습니다.

(물어 주실 분들은 서버 이름이 있고 그 안에 특정 번호를 추출해야합니다)

Apache commomns의 StringUtils 클래스를 사용하고 싶습니다.

감사!


이 코드 번호를 사용하면 원하는 출력 만 포함됩니다.

   String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");

나는 항상 이러한 종류의 문제에 대해 Guava String utils 또는 이와 유사한 것을 사용하는 것을 좋아 합니다.

String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123

한 줄만 :

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));

다음을 사용할 수도 있습니다 java.util.Scanner.

new Scanner(str).useDelimiter("[^\\d]+").nextInt()

next()대신 사용 nextInt()하여 숫자를 문자열로 가져올 수 있습니다 .

다음을 사용하여 숫자의 존재를 확인할 수 있습니다 hasNextInt()Scanner.


같은 정규식을 사용하여 [^0-9]숫자가 아닌 모든 항목을 제거하십시오.

거기에서 그냥 사용 Integer.parseInt(String);


이 시도 :

String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");

즉, 모든 디지털 문자 (0-9)를 빈 문자열로 바꿉니다!


동일한 문제에 대해 JUnit 테스트 클래스 (추가 지식 / 정보)를 만들었습니다. 이 정보가 도움이되기를 바랍니다.

   public class StringHelper {
    //Separate words from String which has gigits
        public String drawDigitsFromString(String strValue){
            String str = strValue.trim();
            String digits="";
            for (int i = 0; i < str.length(); i++) {
                char chrs = str.charAt(i);              
                if (Character.isDigit(chrs))
                    digits = digits+chrs;
            }
            return digits;
        }
    }

그리고 JUnit 테스트 케이스는 다음과 같습니다.

 public class StringHelperTest {
    StringHelper helper;

        @Before
        public void before(){
            helper = new StringHelper();
        }

        @Test
    public void testDrawDigitsFromString(){
        assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
    }
 }

다음 정규식을 사용할 수 있습니다.

string.split(/ /)[0].replace(/[^\d]/g, '')

        String line = "This order was32354 placed for QT ! OK?";
        String regex = "[^\\d]+";

        String[] str = line.split(regex);

        System.out.println(str[1]);

당신이 사용할 수있는 str = str.replaceAll("\\D+","");


문자열을 분할하고 각 문자와 비교할 수 있습니다.

public static String extractNumberFromString(String source) {
    StringBuilder result = new StringBuilder(100);
    for (char ch : source.toCharArray()) {
        if (ch >= '0' && ch <= '9') {
            result.append(ch);
        }
    }

    return result.toString();
}

코드 테스트

    @Test
    public void test_extractNumberFromString() {
    String numberString = NumberUtil.extractNumberFromString("+61 415 987 636");
    assertThat(numberString, equalTo("61415987636"));

    numberString = NumberUtil.extractNumberFromString("(02)9295-987-636");
    assertThat(numberString, equalTo("029295987636"));

    numberString = NumberUtil.extractNumberFromString("(02)~!@#$%^&*()+_<>?,.:';9295-{}[=]987-636");
    assertThat(numberString, equalTo("029295987636"));
}

기호가 있고 숫자 만 원하는 경우이 방법을 시도하십시오.

    String s  = "@##9823l;Azad9927##$)(^738#";
    System.out.println(s=s.replaceAll("[^0-9]", ""));
    StringTokenizer tok = new StringTokenizer(s,"`~!@#$%^&*()-_+=\\.,><?");
    String s1 = "";
    while(tok.hasMoreTokens()){
        s1+= tok.nextToken();
    }
    System.out.println(s1);

쉼표로 구분하거나 쉼표로 구분하지 않는 경우 매우 간단한 솔루션

public static void main(String[] args) {

    String input = "a,1,b,2,c,3,d,4";
    input = input.replaceAll(",", "");

    String alpha ="";
    String num = "";

    char[] c_arr = input.toCharArray();

    for(char c: c_arr) {
        if(Character.isDigit(c)) {
            alpha = alpha + c;
        }
        else {
            num = num+c;
        }
    }

    System.out.println("Alphabet: "+ alpha);
    System.out.println("num: "+ num);

}

   `String s="as234dfd423";
for(int i=0;i<s.length();i++)
 {
    char c=s.charAt(i);``
    char d=s.charAt(i);
     if ('a' <= c && c <= 'z')
         System.out.println("String:-"+c);
     else  if ('0' <= d && d <= '9')
           System.out.println("number:-"+d);
    }

산출:-

number:-4
number:-3
number:-4
String:-d
String:-f
String:-d
number:-2
number:-3

참조 URL : https://stackoverflow.com/questions/14974033/extract-digits-from-string-stringutils-java

반응형