我正在尝试解决Panacea - truth or lie挑战。
基本上,我必须检查文本文件(可以包含多行)中两组数字的总和是否相等。第一组是十六烷数字,第二组是二进制。两组的分隔由数字9完成(我在使用split和参数|
作为定界表达式时遇到问题,您知道为什么吗?)
输入示例:
64 6e 78 9 100101100 11110
5e 7d 59 9 1101100 10010101 1100111
如果运行一次代码就可以了,但是进入while循环,我会收到一个NumberFormatExceptions
。
这是我的最终代码:
import java.util.*;
import java.io.*;
public class test {
public static void main (String[] args) throws IOException {
BufferedReader buff = new BufferedReader(new FileReader ("C:\\Users\\Steel\\Desktop\\JAVA\\somme\\som.txt"));
int somma_bin;
int somma_hex;
int i;
String ciao = "9";
List<String> binehex = new ArrayList<>();
String prova;
while ((prova = buff.readLine()) != null) {
somma_bin = 0;
somma_hex = 0;
binehex = Arrays.asList(prova.split(" "));
i = 0;
while (!(binehex.get(i)).equals(ciao)) {
somma_hex += Integer.parseInt(binehex.get(i), 16);
i++;
}
i++;
while (i < (binehex.size()-1)) {
somma_bin += Integer.parseInt(binehex.get(i), 2);
i++;
}
if (somma_bin == somma_hex) {
System.out.println("true");
} else {
System.out.println("false");
}
System.out.println(prova);
}
}
}
最佳答案
除了有很多代码之外,我看不到明显的问题。
尝试更多结构:
String line; // given a line
String[] parts = line.split(" 9 ");
int sumHex = Arrays.stream(parts[0].split(" ")).mapToInt(s -> Integer.parseInt(s, 16)).sum();
int sumBin = Arrays.stream(parts[1].split(" ")).mapToInt(s -> Integer.parseInt(s, 2)).sum();
System.out.println(sumHex == sumBin);
我不确定用
"|"
进行拆分的相关性如何,因为这不在您发布的代码中,但是如果您想在管道上进行拆分,则必须定界,因为管道字符在regex中具有特殊含义:string.split("\\|");
关于java - 如何将不同的行拆分为字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35685164/