88

私は文字列を持っていて、文字列内の数字の (唯一の) シーケンスを抽出したいと考えています。

例: helloThisIsA1234Sample。1234が欲しい

一連の数字は、文字列内で 1 回だけ発生しますが、同じ位置には発生しません。

(尋ねる人のために、私はサーバー名を持っており、その中の特定の番号を抽出する必要があります)

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

ありがとう!

4

18 に答える 18

180

このコード番号を使用すると、目的の出力のみが含まれます。

   String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");
于 2013-02-20T07:05:27.813 に答える
35

私はいつも、次のような問題に対してGuava String utilsなどを使用するのが好きです。

String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123
于 2015-01-08T13:37:51.630 に答える
25

1行だけ:

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
于 2016-03-11T13:51:13.150 に答える
12

次のものも使用できますjava.util.Scanner

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

next()の代わりにを使用nextInt()して、数字を として取得できますStringInteger.parseInt結果を呼び出すと、を呼び出すよりも何倍も高速になる可能性があることに注意してくださいnextInt()

hasNextInt()を使用して番号の存在を確認できますScanner

于 2013-02-20T07:18:10.300 に答える
7

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

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

于 2013-02-20T07:01:14.850 に答える
4

これを試して :

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

これは、出現するすべてのデジタル文字 (0 ~ 9) を空の文字列に置き換えることを意味します。

于 2015-01-30T18:51:49.313 に答える
3

同じ問題について、JUnit Test クラスを (追加の知識/情報として) 作成しました。これがお役に立てば幸いです。

   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"));
    }
 }
于 2014-05-03T11:03:17.697 に答える
2
        String line = "This order was32354 placed for QT ! OK?";
        String regex = "[^\\d]+";

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

        System.out.println(str[1]);
于 2016-05-06T05:51:48.980 に答える
2

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

于 2017-03-09T02:38:58.510 に答える
2

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

string.split(/ /)[0].replace(/[^\d]/g, '')
于 2013-02-20T07:01:26.487 に答える
1

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

    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);
于 2013-02-20T07:16:13.823 に答える
-1

これを試すことができます:

  String str="java123java456";
  String out="";
  for(int i=0;i<str.length();i++)
  {
    int a=str.codePointAt(i);
     if(a>=49&&a<=57)
       {
          out=out+str.charAt(i);
       }
   }
 System.out.println(out);
于 2019-11-03T11:52:40.907 に答える