为什么我不能对 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
我是 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