web-dev-qa-db-ja.com

文字列から数字を抽出-StringUtils Java

文字列があり、文字列内の数字のシーケンス(のみ)を抽出したい。

例:helloThisIsA1234Sample。 1234が欲しい

数字のシーケンスが文字列内で一度だけ発生し、同じ位置では発生しないことは当然です。

(質問する人のために、サーバー名があり、その中から特定の番号を抽出する必要があります)

Apache commomnsのStringUtilsクラスを使用したいと思います。

ありがとう!

56
NinaNa

このコードを使用してくださいnumberOnlyには、目的の出力が含まれます。

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

私はいつも Guava String utils またはこれらの種類の問題に類似したものを使うのが好きです:

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

1行だけ:

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

Java.util.Scannerを使用することもできます:

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

next()の代わりにnextInt()を使用して、数字を文字列として取得できます。

ScannerhasNextInt()を使用して、番号の存在を確認できます。

8

[^0-9]などの正規表現を使用して、すべての非数字を削除します。

そこから、Integer.parseInt(String);を使用するだけです

6
user1181445

これを試して :

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

つまり、出現するすべてのデジタル文字(0〜9)を空の文字列に置き換えます。

4
Shessuky

同じ問題に対して(追加の知識/情報として)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"));
    }
 }
3
PAA

次の正規表現を使用できます。

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

str = str.replaceAll("\\D+","");を使用できます

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

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

        System.out.println(str[1]);
2
Az.MaYo

記号があり、数字だけが必要な場合は、このアプローチを試してください。

    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);
1
Azad

文字列を分割して、各文字と比較できます

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"));
}
1
sendon1982

コンマで区切られている場合、またはコンマで区切られていない場合は、非常に単純なソリューション

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);

}
0
Rishabh Agarwal