从字符串中提取数字 - StringUtils Java

104

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

例如: helloThisIsA1234Sample. 我想要的是 1234

可以确定数字序列在字符串中只出现一次,但位置不同。

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

我想使用Apache commomns中的StringUtils类。

谢谢!


1
Apache StringUtils。不过我不确定你为什么想要使用它。 - Rahul
这就是我拥有的,想知道是否已经有一个函数可以做我需要的事情,但我对它不是很熟悉。 - NinaNa
因为当你可以使用String本身完成时,你就不需要来自Apache的StringUtils - Rahul
19个回答

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

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

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

2

You can use str = str.replaceAll("\\D+","");


2
您可以使用以下正则表达式。
string.split(/ /)[0].replace(/[^\d]/g, '')

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

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

这现在是一个慢速解决方案,因为String是不可变的,在每个循环迭代中都会创建新的String实例,至少要用StringBuilder替换。但仍然不够优雅。 - Perlos

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

}

-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

您的输出似乎与测试输入不匹配。 - Andrew Mortimer

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

1
来自评论区:嗨,请不要只回答源代码。请尝试提供有关您解决方案如何工作的良好描述。请参阅:如何撰写好答案?。谢谢。 - sɐunıɔןɐqɐp
大写字母或其他语言怎么办? - Viktor Yakunin

-6

简单的Python代码,用于将字符串中的数字分离出来

  s="rollnumber99mixedin447"
  list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))

4
这个问题有显式的Java标签。 - Viktor Yakunin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接