Character.digit("7.00".charAt(i++),radix) 报错
时间: 2023-11-17 09:04:53 浏览: 26
`Character.digit(char ch, int radix)` 方法的第一个参数是一个字符类型的参数,而 `"7.00".charAt(i++)` 返回的是一个字符串类型的参数。
因此,应该将 `"7.00".charAt(i++)` 改为 `"7.00".charAt(i)`,即:
```
Character.digit("7.00".charAt(i), radix)
```
另外,还需要确保 i 的值在正确的范围内,即 `i >= 0 && i < "7.00".length()`。
相关问题
Character.digit("7.00".charAt(i++),radix) 7报错
`Character.digit(char ch, int radix)` 方法的第一个参数必须是表示有效数字的字符,例如 '0' 到 '9','a' 到 'z' 或 'A' 到 'Z' 等。
而在 `"7.00".charAt(i++)` 中,i 的初始值为 0,执行完该语句后,i 的值变为 1,即 `"7.00".charAt(0)` 返回字符 '7',而不是有效数字。
因此,`Character.digit("7.00".charAt(i++), radix)` 的返回值为 -1,表示字符 '7' 不是指定基数 radix 中的有效数字。
如果要将字符串 "7.00" 中的数字转换为整数,可以使用 Integer.parseInt(String s) 方法,例如:
```
int num = Integer.parseInt("7.00");
```
public static byte[] stringToHexByteArray(String input) { int len = input.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(input.charAt(i), 16) << 4) + Character.digit(input.charAt(i+1), 16)); } return data; } 使用这个报错了
这个方法的作用是将一个十六进制字符串转换为字节数组。根据你提供的代码,我猜测你遇到了 `StringIndexOutOfBoundsException` 异常,这个异常是因为当输入字符串长度为奇数时,你在循环中访问了一个不存在的字符。比如当输入字符串为 "12" 时,循环只会执行一次,但是在第二次循环时,`input.charAt(i+1)` 就会抛出 `StringIndexOutOfBoundsException` 异常,因为字符串中只有一个字符而你却试图访问第二个字符。
为了解决这个问题,你需要在循环中对输入字符串的长度进行判断,只有当字符串长度为偶数时才进行循环,代码如下:
```java
public static byte[] stringToHexByteArray(String input) {
int len = input.length();
if (len % 2 != 0) {
throw new IllegalArgumentException("Input string must have an even number of characters");
}
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(input.charAt(i), 16) << 4)
+ Character.digit(input.charAt(i+1), 16));
}
return data;
}
```
这样做可以确保输入字符串的长度为偶数,从而避免访问不存在的字符。此外,当输入字符串长度为奇数时,我在代码中抛出了一个 `IllegalArgumentException` 异常,这样可以提供更好的错误信息。