以字符串形式获取彼此旁边的数字

时间:2017-05-14 18:51:10

标签: java arraylist

我想知道如何从字符串中创建一个并排的数字列表。

输入:

"This is a test 234 234 34 56 and possibly 34 not a good example 234,34"

我实际上正在使用此代码创建字符串中所有数字的列表,但没有分开。

public List getNumbers(String s) {
    String str = s.replaceAll("[^-?0-9]+", " ");
    return Arrays.asList(str.trim().split(" "));
}

输出我有:

["234", "234", "34", "56", "34", "234", "34"]

输出我想获得:

["234 234 34 56","34","234 34"]

我真的希望你们能帮助我,谢谢。 (我是新来的,如果我做错了,不会抱歉。)

3 个答案:

答案 0 :(得分:4)

这是一种方法:

String str = "This is a test 234 234 34 56 and possibly 34 not a good example 234,34";
System.out.println(Arrays.stream(str.split("[^0-9 ]+"))
            .map(i -> i.trim())
            .filter(i -> !i.isEmpty())
            .collect(Collectors.toList()));

输出:

[234 234 34 56, 34, 234, 34]

说明:

我将字符串分割成任何不是数字或空格的字符串,然后修剪每个部分。最后,我删除空字符串并将所有内容收集到列表中。

编辑: Andy Turner's方法更好。我会离开我的。

答案 1 :(得分:1)

使用Matcher

Matcher matcher = Pattern.compile("[0-9]([\\s0-9]*[0-9])?").matcher(s);
while (matcher.find()) {
  System.out.println(matcher.group());
}

请注意,这会将234,34视为两个令牌;但不清楚为什么会这样。请在问题中澄清。

答案 2 :(得分:1)

import java.util.List;
import java.util.Arrays;
import java.util.LinkedList;

public static void main(String[] args) {

    String input = "This is a test 234 234 34 56 and possibly 34 not a good example 234,34";
    List < String > temp = new LinkedList < String > (Arrays.asList(input.split("\\s*(,|\\s)\\s*")));
    for (int i = 0; i < temp.size(); i++) {
        if (!isNumeric(temp.get(i))) {
            System.out.println(temp.get(i));
            temp.remove(i);
            i--;
        }
    }

    System.out.println(temp);

}

public static boolean isNumeric(String str) {
    try {
        double d = Double.parseDouble(str);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}