我正在尝试解决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/

10-09 16:39