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

Nin*_*aNa 58 java string string-utils apache-stringutils

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

示例:helloThisIsA1234Sample.我想要1234

这是一个给定的数字序列只在字符串中出现一次但不在同一位置.

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

我想使用Apache commomns中的StringUtils类.

谢谢!

小智 125

使用此代码编号只包含您想要的输出.

   String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");
Run Code Online (Sandbox Code Playgroud)

  • String.replaceAll()将在每次运行时编译该模式.真的不太理想.检查它的来源.使用Guava的CharMathcer.DIGIT.retainFrom(),如下所示. (4认同)
  • 不适用于负数:( (4认同)
  • 在最近的 Java 中,正则表达式可以简化为“\\D” (2认同)

Mic*_*vin 25

我总是喜欢使用Guava String utils或类似的问题来解决这些问题:

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

  • 这比正则表达式快得多。这应该是公认的答案。 (4认同)
  • 使用 CharMatcher.digit().retainFrom("xx123xx"); 相反,DIGIT 计划于 2018 年 6 月删除。 (2认同)
  • `CharMather.digit()` 也已弃用。我使用了`CharMatcher.inRange('0', '9').retainFrom("xx123xx");` (2认同)

rnr*_*ies 14

只需一行:

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
Run Code Online (Sandbox Code Playgroud)


Mar*_*amy 8

您还可以使用java.util.Scanner:

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

您可以使用next()而不是nextInt()将数字作为字符串.

您可以检查数的使用存在hasNextInt()Scanner.


小智 6

使用正则表达式[^0-9]删除所有非数字.

从那里,只需使用 Integer.parseInt(String);


She*_*uky 6

尝试这个 :

String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");
Run Code Online (Sandbox Code Playgroud)

这意味着:用空字符串替换所有出现的数字字符 (0 -9)!