从字符串中提取整数

时间:2014-08-04 13:26:42

标签: java android string

在我的应用中,我收到了一个字符串。例如:

"1 \n2 4 \n18 \n 3 20 12 \n 4\n23"

我想从字符串中获取所有整数,如

1,2,4,18,3,20,12,4,23.

我无法使用string.split。除了数字之外只有2个字符(我的字符串中的新行字符和空格)。

提前致谢:)

4 个答案:

答案 0 :(得分:4)

假设您的文本(和空格)中只有整数(范围-2147483648和2147483647),您可以轻松使用Scanner

String input = "1 \n2 4 \n18 \n 3 20 12 \n 4\n23";
Scanner sc = new Scanner(input);
while(sc.hasNextInt())
    System.out.println(sc.nextInt());

对于超出这些范围的数字,您可以使用nextLongnextBigInteger。但是,如果您对返回实际类型不感兴趣,并且可以将它们设为String,则可以使用next

答案 1 :(得分:2)

您可以将REGEX与\\d+一起使用。

public static void main(String[] args) {
    String s = "1 \n2 4 \n18 \n 3 20 12 \n 4\n23";
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group());
    }
}

O / P:

1
2
4
18
3
20
12
4
23

答案 2 :(得分:0)

您可以使用StringTokenizer在Android上执行此操作。

StringTokenizer tokens = new StringTokenizer(yourString, "\\n");

答案 3 :(得分:0)

除了上面的Pattern / Matcher回复......

如果只想使用拆分,这将有效:

String str = "1 \n2 4 \n18 \n 3 20 12 \n 4\n23";
StringBuffer bfr = new StringBuffer();
for (String splitStr: str.split("[\\n\\s]+")){
    bfr.append("," + splitStr);
}
System.out.println(bfr.toString().substring(1));
}

或使用tokenizer:

String str = "1 \n2 4 \n18 \n 3 20 12 \n 4\n23";
StringTokenizer strToken = new StringTokenizer(str, "[\n ]+");
StringBuffer bfr = new StringBuffer();
while (strToken.hasMoreElements()){
    bfr.append("," + strToken.nextElement().toString());
}
System.out.println(bfr.toString().substring(1));
}