java - 在 Windows 中运行时出现 charAt 问题

标签 java char

我有一小段代码,旨在用不带重音的字母替换带重音的字母。

protected String sinAcentos(String str) {

    // Cadena de caracteres original a sustituir.
    String original = "áàäéèëíìïóòöúùuñÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑçÇ";
    // Cadena de caracteres ASCII que reemplazarán los originales.
    String ascii = "aaaeeeiiiooouuunAAAEEEIIIOOOUUUNcC";

    String tmp = str;
    for (int i=0; i<original.length(); i++) {
        // Reemplazamos los caracteres especiales.
        tmp = tmp.replace(original.charAt(i), ascii.charAt(i));
    }//for i
    return tmp;
}

当我从 IDE (eclipse) 中运行此函数时,没有错误。 但随后我导出并创建了一个可执行产品,该产品在 Windows 7 和 Windows XP 上运行。

当函数运行时发生错误,文本为:

Index out of bounds:34

所以,34是原始字符串变量的长度。因此循环应该在 0 和 33 之间循环 i ,因为循环条件: i < original.lenght() ...

我更改了代码,在替换行添加了 try...catch,这就是现在的工作方式。

知道代码有什么问题吗?

最佳答案

请检查 Java 源文件的编码,并检查两个字符串使用的字符集。

这些之间可能不匹配,并且某些编码需要比其他编码更多的字节来处理特殊字符(例如 UTF-8 与 ISO-8859-1)。

确保您的 Java 源文件使用 UTF-8,而不是 ISO-8859-1 或 Windows 特定的编码(如 CP-1252)。

关于java - 在 Windows 中运行时出现 charAt 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8457191/

相关文章:

java - 重新加载的文件在java中没有改变

java - 何时创建新的 ForkJoinPool 以及何时使用 CommonPool?

c++ - 字符赋值数组不起作用

c - 将 char* 传递给结合 memcpy 的函数

Java:BigDecimal 错误地给出除以 0 的错误

java - 尽管定义了 RequestContextListener,但创建名称为 'scopedTarget.oauth2ClientContext' 的 bean 时出错

c++ - memcpy 和 _CrtlsValidHeapPointer(pUserData)

java - 我遇到了 char 问题

java - 按位运算符

c - 为什么我不能重用 c = getchar();在 str1 上使用后在 str2 上? (C)