我有一个字符串,我想提取字符串中的(唯一)数字序列。
实施例: helloThisIsA1234Sample。 我想要1234
给定数字序列在字符串中只出现一次但不在同一位置。
(对于那些会问,我有服务器名称并需要提取其中的特定号码的人)
我想使用Apache commomns中的StringUtils类。
谢谢!
答案 0 :(得分:118)
使用此代码编号仅包含所需的输出。
String str="sdfvsdf68fsdfsf8999fsdf09";
String numberOnly= str.replaceAll("[^0-9]", "");
答案 1 :(得分:23)
我总是喜欢使用Guava String utils或类似的问题来解决这些问题:
String theDigits = CharMatcher.digit().retainFrom("abc12 3def"); // 123
答案 2 :(得分:14)
只需一行:
int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
答案 3 :(得分:8)
您还可以使用java.util.Scanner
:
new Scanner(str).useDelimiter("[^\\d]+").nextInt()
您可以使用next()
代替nextInt()
将数字作为字符串。
您可以使用hasNextInt()
上的Scanner
检查是否存在号码。
答案 4 :(得分:6)
使用[^0-9]
等正则表达式删除所有非数字。
从那里开始,只需使用Integer.parseInt(String);
答案 5 :(得分:4)
试试这个:
String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");
这意味着:用空字符串替换所有出现的数字字符(0 -9)!
答案 6 :(得分: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"));
}
}
答案 7 :(得分:2)
您可以使用以下正则表达式。
string.split(/ /)[0].replace(/[^\d]/g, '')
答案 8 :(得分:2)
您可以使用以下代码保留String中的整数。
String text="Hello1010";
System.out.println(CharMatcher.digit().retainFrom(text));
将为您提供以下输出
1010
答案 9 :(得分:2)
您可以使用str = str.replaceAll("\\D+","");
答案 10 :(得分:2)
String line = "This order was32354 placed for QT ! OK?";
String regex = "[^\\d]+";
String[] str = line.split(regex);
System.out.println(str[1]);
答案 11 :(得分:1)
您可以拆分字符串并与每个字符进行比较
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"));
}
答案 12 :(得分: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);
答案 13 :(得分: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);
}
答案 14 :(得分:0)
用于分隔字符串中数字的简单python代码
s="rollnumber99mixedin447"
list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))
答案 15 :(得分:0)
为找到浮点数提供了最佳答案
String str="2.53GHz";
String decimal_values= str.replaceAll("[^0-9\\.]", "");
System.out.println(decimal_values);
答案 16 :(得分:-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
答案 17 :(得分:-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);