为什么我不能对 ArrayList Integer 列求和?

Why i can't sum an ArrayList Integer colum?

我是 java 的新手,我不明白,有什么提示吗?

我正在尝试对所有这些数字求和

点赞 719488 + 4093600 + 4096453 + 4096453 + 4096453 = 点赞

我得到的结果是:

1438976
8187200
8192906
8192906
8192906
65536
655360
262144
262144
655360
262144
655360
65536000
2097152
8192906

基本上是将每行中的每个数字乘以 2 乘以它自己的值。

拜托,我需要帮助。 谢谢

添加更多信息:

String strHDD = "df -i\n" +
        "Filesystem                    Inodes  IUsed    IFree IUse% Mounted on\n" +
        "/dev/mapper/vg0-rootvol       719488  42967   676521    6% /\n" +
        "devtmpfs                     4093600    436  4093164    1% /dev\n" +
        "tmpfs                        4096453      1  4096452    1% /dev/shm\n" +
        "tmpfs                        4096453   1384  4095069    1% /run\n" +
        "tmpfs                        4096453     16  4096437    1% /sys/fs/cgroup\n" +
        "/dev/sda1                      32768    351    32417    2% /boot\n" +
        "/dev/mapper/vg0-optvol        327680  19465   308215    6% /opt\n" +
        "/dev/mapper/vg0-homevol       131072    322   130750    1% /home\n" +
        "/dev/mapper/vg0-tmpvol        131072    166   130906    1% /tmp\n" +
        "/dev/mapper/vg0-varvol        327680   4486   323194    2% /var\n" +
        "/dev/mapper/vg0-logvol        131072    163   130909    1% /var/log\n" +
        "/dev/mapper/vg0-auditvol      327680     34   327646    1% /var/log/audit\n" +
        "/dev/mapper/vg1-optSPvol    32768000 156936 32611064    1% /opt/SP\n" +
        "/dev/mapper/vg0-varcrashvol  1048576     11  1048565    1% /var/crash\n" +
        "tmpfs                        4096453      1  4096452    1% /run/user/10603\n" +
        "[1;31mvg1108yr:resolve:[0m/opt/SP/resolve $"

      String strRegex = "(\d+)\s+(\d+\s+(\d+)(?=\s+\d+\%))"
      Pattern pattern = Pattern.compile(strRegex);
      Matcher matcher = pattern.matcher(strHDD);
      while (matcher.find()) {

    String[] stringArray = matcher.group().split("\s+")

          List<String> list = Arrays.asList(stringArray)

          List<Integer> newList = list.stream()
                  .map(s -> Integer.parseInt(s))
                  .collect(Collectors.toList());


          int [][] num = newList

          int columTotal = 0

          for (int i = 0; i < num.length; i++){
              columTotal += num[i][0]
          }
          println(newList)



}

输出:

[719488, 42967, 676521]
[4093600, 436, 4093164]
[4096453, 1, 4096452]
[4096453, 1384, 4095069]
[4096453, 16, 4096437]
[32768, 351, 32417]
[327680, 19465, 308215]
[131072, 322, 130750]
[131072, 166, 130906]
[327680, 4486, 323194]
[131072, 163, 130909]
[327680, 34, 327646]
[32768000, 156936, 32611064]
[1048576, 11, 1048565]
[4096453, 1, 4096452]

Process finished with exit code 0

或:

int columTotal = 0

          for (int i = 0; i < num.length; i++){
              columTotal += num[i][0]
          }
          println(columTotal)

1438976
8187200
8192906
8192906
8192906
65536
655360
262144
262144
655360
262144
655360
65536000
2097152
8192906

Process finished with exit code 0

但它永远不会只乘以二

在您的字符串中 Inodes = IUsed + IFree。当您在每次迭代中一个一个地找到匹配器时,所有 3 个值 Inodes、IUsed、IFree 都会被拾取。所以每次迭代都打印 Inodes + IUsed + IFree。这就是为什么你在这里得到双倍的价值。

所以你的代码应该是这样的:

public static void main(String[] args) throws JSONException {
    String strHDD = "df -i\n" + "Filesystem                    Inodes  IUsed    IFree IUse% Mounted on\n"
        + "/dev/mapper/vg0-rootvol       719488  42967   676521    6% /\n"
        + "devtmpfs                     4093600    436  4093164    1% /dev\n"
        + "tmpfs                        4096453      1  4096452    1% /dev/shm\n"
        + "tmpfs                        4096453   1384  4095069    1% /run\n"
        + "tmpfs                        4096453     16  4096437    1% /sys/fs/cgroup\n"
        + "/dev/sda1                      32768    351    32417    2% /boot\n"
        + "/dev/mapper/vg0-optvol        327680  19465   308215    6% /opt\n"
        + "/dev/mapper/vg0-homevol       131072    322   130750    1% /home\n"
        + "/dev/mapper/vg0-tmpvol        131072    166   130906    1% /tmp\n"
        + "/dev/mapper/vg0-varvol        327680   4486   323194    2% /var\n"
        + "/dev/mapper/vg0-logvol        131072    163   130909    1% /var/log\n"
        + "/dev/mapper/vg0-auditvol      327680     34   327646    1% /var/log/audit\n"
        + "/dev/mapper/vg1-optSPvol    32768000 156936 32611064    1% /opt/SP\n"
        + "/dev/mapper/vg0-varcrashvol  1048576     11  1048565    1% /var/crash\n"
        + "tmpfs                        4096453      1  4096452    1% /run/user/10603\n";

    String strRegex = "(\d+)\s+(\d+\s+(\d+)(?=\s+\d+\%))";
    Pattern pattern = Pattern.compile(strRegex);
    Matcher matcher = pattern.matcher(strHDD);
    int columTotal = 0;
    while (matcher.find()) {

      String[] stringArray = matcher.group().split("\s+");

      List<String> list = Arrays.asList(stringArray);

      List<Integer> newList = list.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());

      columTotal += newList.get(0);
      System.out.println("Value to add : " + newList.get(0));
      
    }
    System.out.println("Total : " + columTotal);
  }

结果:

Value to add : 719488
Value to add : 4093600
Value to add : 4096453
Value to add : 4096453
Value to add : 4096453
Value to add : 32768
Value to add : 327680
Value to add : 131072
Value to add : 131072
Value to add : 327680
Value to add : 131072
Value to add : 327680
Value to add : 32768000
Value to add : 1048576
Value to add : 4096453
Total : 56424500