Java 读取十六进制文件并将其转换为十进制

Java 读取十六进制文件并将其转换为十进制,java,java.util.scanner,Java,Java.util.scanner,当读取包含基数16的文件时,我的扫描器只读取偶数,对奇数抛出无此元素异常。。。我是java新手,所以这可能很简单,但我不知所措。。。我目前的代码如下 import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.NoSuchElementException; public class HexToDe

当读取包含基数16的文件时,我的扫描器只读取偶数,对奇数抛出无此元素异常。。。我是java新手,所以这可能很简单,但我不知所措。。。我目前的代码如下

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.NoSuchElementException;

public class HexToDecimalConverter {
    public static void main(String[] args) {
        try {
            Scanner HexFile = new Scanner(new File("Hexidecimal.txt"));

            do {
                String Hex = HexFile.next();
                System.out.println(Hex);
                int outputDecimal = Integer.parseInt(Hex, 16);
                System.out.println(outputDecimal);
            } while (HexFile.next() != "  ");

        } catch (FileNotFoundException fileNotFoundExc) {
            System.out.println("file not found");
            System.exit(0);
        } catch (IOException IOExc) {
            System.out.println("IO Exception");
            System.exit(0);
        } catch (NoSuchElementException noSuchElementExc){
            System.out.println("No Such Element");
            System.exit(0);
        }


    {
    }
}
}
你的情况:

} while (HexFile.next() != "  ");
} while (HexFile.hasNext());
还读取十六进制数并丢弃它(因为您不会将其返回值存储在任何位置)。这解释了为什么代码只打印偶数

而是使用以下条件:

} while (HexFile.next() != "  ");
} while (HexFile.hasNext());
只测试是否有更多令牌,但如果有更多令牌,则不读取或丢弃下一个令牌

此外,您可能希望使用
while
循环,在读取之前进行测试,因为文件可能不包含任何内容,例如:

while (HexFile.hasNext()) {
    String Hex = HexFile.next();
    // rest of your code
}

这是因为您两次调用HexFile.next()
从如下更改代码开始:

    String Hex = HexFile.next();
    while (Hex!= "  ") {
        System.out.println(Hex);
        int outputDecimal = Integer.parseInt(Hex, 16);
        System.out.println(outputDecimal);
        String Hex = HexFile.next();
    }