将以空格分隔的整数字符串解析为过滤后的整数数组

时间:2019-01-31 19:52:48

标签: java

我读了一个带有数字列表的字符串。然后,我创建了一个长度为3的数组。我的问题是,如何将字符串中的数字放入数组中(如果多于或少于3个数字> 11没关系)。

我尝试按顺序遍历字符串并将值放入输出数组,但这没有用。我也曾尝试将输出数组设置为String数组,但这也被证明是不正确的。

    public int[] findNums(String line)
{
    int[] array = new int[3];
    list = line;
    String[] parts = array.split(" ");
    int index = 0;
    for(int spot=0; spot<parts.length();spot++)
    {
        if(parts[spot] > 11)
        {
            array[index] = spot;
            index++;
        }
    }
    return array;
}

据我所知,这是我所拥有的方法,我有一个遍历字符串和if语句的循环,以检查数字的值。 可能有一些语法错误(对不起,请提前对不起)我是Java数组的新手。 这是我要导入的DAT文件的示例。

-99 1 2 3 4 5 6 7 8 9 10 12345
10 9 8 7 6 5 4 3 2 1 -99
10 20 30 40 50 -11818 40 30 21 10 
32767
250 19 17 15 13 11 10 9 6 3 2 1 -455
255 255

新数组的输出应为

[12345,0,0]

因为只有一个数字大于11。

这是第一行的输出,但是DAT文件中所有行的格式都相同。

有人可以告诉我如何解决我的方法吗?

2 个答案:

答案 0 :(得分:2)

这是一个不错的解决方案:

public int[] getNumsFromString (String text) {
    String[] individNums = text.split(" ");
    int[] nums = new int[3];

    int counter = 0;

    for (int i = 0; i < individNums.length; i++) {
        int currentValue = Integer.parseInt(individNums[i]);
        if (currentValue > 11 && counter < 3) {
            nums[counter++] = currentValue;
        }
    }
    return nums;
}

希望有帮助!

答案 1 :(得分:0)

我需要确认您的目标是否是从传入的列表中提取所有值大于11的数字?您似乎在混淆索引的值。如果您真正想要的是所有条目11个或更多,请尝试此操作。您没有正确实例化list变量,如果它是一个逗号分隔的列表,则需要使用上面评论者提到的split函数。

public ArrayList<Integer> findNums(String line)
{
    ArrayList<Integer> twelvePlus = new ArrayList<Integer>();
    String[] numbers = line.split(" ");
    for(int index=0; index<numbers.length;index++)
    {
        if(Integer.valueOf(numbers[index]) > 11)
        {
            twelvePlus.add(new Integer(Integer.valueOf(numbers[index])));
            index++;
        }
    }
    return twelvePlus;
}

...它返回可变数量的数字,表示传入的列表中所有大于11的数字。如果要强制执行上限,则可以根据条件的大小在条件内添加break语句数组列表。你真的想要零吗?它必须是整数数组的返回值吗?我的示例说明了泛型的使用。另外,猜测您从未遇到过这种情况,因为您遇到类型不匹配错误...