我有一小段代码,旨在用不带重音的字母替换带重音的字母。
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/