gpt4 book ai didi

java - 转换为阿拉伯数字时出现 ArrayIndexOutOfBoundsException 中断

转载 作者:行者123 更新时间:2023-12-01 10:37:54 25 4
gpt4 key购买 nike

我正在尝试将给定字符串中的英文数字转换为阿拉伯数字。除非给定的字符串(来自网络服务)包含阿拉伯数字而不是英语,否则效果很好。为此我收到以下错误:

java.lang.ArrayIndexOutOfBoundsException: length=10; index=1586

我正在使用以下函数来执行转换任务:

  public static String convertToArabicDigits(String str) {
char[] arrayOfChar = {1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641};
if ((str != null)|| (!str.isEmpty())) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i))) {
builder.append(arrayOfChar[(int) (str.charAt(i)) - 48]);
} else {
builder.append(str.charAt(i));
}
}
return builder.toString();
}
else return "";
}

如果字符串包含阿拉伯数字,则会发生这种情况:

التقنية الأكثر طلباً التي سيحرم منها العالم العربي في العام ٢٠١٦

但正如前面提到的,如果字符串包含英文数字,​​转换函数可以正常工作

التقنية الأكثر طلباً التي سيحرم منها العالم العربي في العام 2016

你能帮忙吗?

编辑:我认为如果 (str.charAt(i))) 存在于 arrayOfChar 中,我应该跳过转换,否则进行转换。

有什么想法吗?

最佳答案

异常(exception)情况很明显,从 (int) (str.charAt(i)) - 48] 生成的索引 1586 是错误的索引,所以你有将其更改为适合您的数组长度,但此问题是因为条件 Character.isDigit(str.charAt(i) 如果 char 是阿拉伯或英文数字,​​它将返回 true。

所以你必须改变这个条件:

if (Character.isDigit(str.charAt(i))) {

致:

if (isContains(englishDigits, str.charAt(i))) {

并在 arrayOfChar 附近添加以下行:

char[] englishDigits= {48, 49, 50, 51, 52, 53, 54, 55, 56, 57};

因此,即使您传递像 34٣٤٥ 这样的字符串,该方法也会返回٣٤٣٤٥

isContains 是检查 char 是否在 char 数组中的方法。

//编辑

public static boolean isContains (char[] arr, char c) {
for (int i=0; i<arr.length; i++) {
if (arr[i] == c) {
return true;
}
}
return false;
}

但最好使用一些库来做到这一点,例如 commons.apache ArrayUtils.contains

//编辑2

我认为最好通过替换这些行来不使用数组进行转换:

if (isContains(englishDigits, str.charAt(i))) {
builder.append(arrayOfChar[(int) (str.charAt(i)) - 48]);

与:

if (str.charAt(i)>=48 && str.charAt(i)<=48+9) { // english digit
builder.append((char)(str.charAt(i)-48+1632)); // convert from english to arabic digit

关于java - 转换为阿拉伯数字时出现 ArrayIndexOutOfBoundsException 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com