88

我有一个字符串,我想提取字符串中的(唯一)数字序列。

示例:helloThisIsA1234Sample。我要1234

假定数字序列在字符串中仅出现一次,但不在同一位置。

(对于那些会问的人,我有一个服务器名称,需要在其中提取一个特定的数字)

我想使用 Apache commomns 中的 StringUtils 类。

谢谢!

4

18 回答 18

180

使用此代码 numberOnly 将包含您想要的输出。

   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

只有一行:

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()将数字作为String. 请注意,调用Integer.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 回答
4

Guava 的CharMatcher类从 a 中提取Integers String

String text="Hello1010";
System.out.println(CharMatcher.digit().retainFrom(text));

产量:

1010
于 2020-03-03T06:45:26.747 回答
3

我为同一问题创建了一个 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"));
    }
 }
于 2014-05-03T11:03:17.697 回答
2

您可以使用以下正则表达式。

string.split(/ /)[0].replace(/[^\d]/g, '')
于 2013-02-20T07:01:26.487 回答
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

您可以拆分字符串并与每个字符进行比较

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"));
}
于 2017-03-09T03:00:26.043 回答
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 回答
0

一个非常简单的解决方案,如果用逗号分隔或者如果没有用逗号分隔

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

}
于 2017-12-15T04:33:13.613 回答
0

扩展查找浮点数的最佳答案

       String str="2.53GHz";
       String decimal_values= str.replaceAll("[^0-9\\.]", "");
       System.out.println(decimal_values);
于 2020-05-10T18:04:06.540 回答
-1
   `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
于 2018-02-26T05:47:32.717 回答
-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 回答
-6

用于分隔字符串中数字的简单python代码

  s="rollnumber99mixedin447"
  list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))
于 2019-11-22T09:07:40.380 回答