【问题标题】:I am trying to add a string of integers into an array, but it is incorrect我正在尝试将一串整数添加到数组中,但它不正确
【发布时间】:2019-03-17 08:59:21
【问题描述】:

我有一个字符串:

"1 2 3 4 5 6 7 8 9"

我希望它添加到我的数组中,这样它就变成了:

[1,2,3,4,5,6,7,8,9]

但是,当我运行我的代码时,

int[] leftValues = new int[9];
    for (String w:left.split("\\s",0)){
      for (int i = 0; i<9; i++){
        leftValues[i] = Integer.valueOf(w);
      }
    }

我的输出给了我:

[9,9,9,9,9,9,9,9,9]

我可以知道我在这里做错了什么吗?

【问题讨论】:

    标签: java arrays split


    【解决方案1】:

    您的嵌套循环首先将第一个整数分配给数组的所有索引,然后是第二个整数 ... ,最后是最后一个整数 (9)。因此,您的数组最终只包含 9。

    你需要一个循环:

    int i = 0;
    for (String w : left.split("\\s",0)) {
        leftValues[i] = Integer.valueOf(w);
        i++;
    }
    

    int i = 0;
    for (String w : left.split("\\s",0)) {
        leftValues[i++] = Integer.valueOf(w);
    }
    

    【讨论】:

    • 另外,0 隐含在拆分中,因此不需要 imo。
    • @YassinHajaj 我不确定你的评论是什么意思。
    • split(String) 应该使用而不是 split(String, int),因为 0 已经是默认值
    【解决方案2】:

    这是 Java 8 的简洁方式

    String numbers = "1 2 3 4 5 6 7 8 9";
    int[] integers = Arrays.stream(numbers.split("\\s"))
                           .mapToInt(s -> Integer.parseInt(s))
                           .toArray();
    

    【讨论】:

    • 有一些方法可以更轻松地做到这一点,而且您输出的是 List 而不是数组
    • 没有意识到需要数组。解决方案变得更加容易。修改了解决方案,本质上现在只是一条解决方案。
    • 不错,可以使用方法参考Integer::parseInt更简洁
    • 这是关于个人测试的。 Integer::parseInt 对某些人来说比 s -> Integer.parseInt() 更神秘,而且很难达成更简洁的共识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2022-06-13
    • 2018-11-17
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多