Java扫描程序nextInt(16)不接受负十六进制值

Java扫描程序nextInt(16)不接受负十六进制值,java,int,hex,Java,Int,Hex,我需要读取十六进制格式的32位数字。输入负值时,会出现输入不匹配异常。只要数字是正数(00000000~7FFFFFFF),任何东西都可以工作,但任何负数(80000000~FFFFFFFF)都会失败 我尝试过各种格式(FFFFFFFF,0xFFFFFFFF,-ffffffffff,-7FFFFFFFF,~FFFFFFFF),结果都是一样的 有什么想法吗?我觉得我肯定错过了一些明显的东西,但我完全被难住了 它将失败的原因与2147483648(多出一个整数。最大值)失败的原因相同Integer.

我需要读取十六进制格式的32位数字。输入负值时,会出现输入不匹配异常。只要数字是正数(00000000~7FFFFFFF),任何东西都可以工作,但任何负数(80000000~FFFFFFFF)都会失败

我尝试过各种格式(FFFFFFFF,0xFFFFFFFF,-ffffffffff,-7FFFFFFFF,~FFFFFFFF),结果都是一样的


有什么想法吗?我觉得我肯定错过了一些明显的东西,但我完全被难住了

它将失败的原因与
2147483648
(多出一个
整数。最大值
)失败的原因相同
Integer.parseInt
:该值太大。它不会将
ffffffff
8000000
解释为负数,而是一个大的正数。这些数字太大,无法解释为
int

匹配正则表达式以查看它是否可以是
int
,然后将其传递给
Integer.parseInt
进行解析:

如果下一个标记与上面定义的整数正则表达式匹配,则该标记将转换为int值,就像删除所有特定于区域设置的前缀、组分隔符和特定于区域设置的后缀一样,然后通过Character.digit将非ASCII数字映射为ASCII数字,并在负号(-)之前加上前缀如果存在特定于区域设置的负前缀和后缀,则将结果字符串传递给具有指定基数的Integer.parseInt

如果不能表示为
int
,将抛出
NumberFormatException

如果发生以下任何情况,将引发NumberFormatException类型的异常:

  • 第一个参数为null或长度为零的字符串

  • 基数小于Character.MIN_基数或大于Character.MAX_基数

  • 字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号“-”(“\u002D”)或加号“+”(“\u002B”),前提是字符串长度大于1

  • 字符串表示的值不是int类型的值

必须将数字指定为负数。尝试
-1
-8000000
或介于两者之间的任何内容;他们会成功的

 System.out.println("Enter first number in hexadecimal format: ");
 Scanner readX = new Scanner(System.in);
 String a = readX.nextLine().trim();
int result=Integer.parseInt(a,16);
这将对你有用,当你得到科学符号的值时,如果它不适合整数。

只是想知道,你试过
-1
?试过
-A
。。。您将获得
-10
 System.out.println("Enter first number in hexadecimal format: ");
 Scanner readX = new Scanner(System.in);
 String a = readX.nextLine().trim();