我有一小段代码,旨在用无重音字母代替重音字母。
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上运行。
当函数运行时发生错误且文本为:
指数超出范围:34
所以,34是原始字符串变量的长度。因此循环应该在0到33之间循环,因为循环条件:i < original.lenght()
...
我更改了代码,在替换行添加了try ... catch,这就是现在的工作方式。
知道代码中有什么问题吗?
答案 0 :(得分:3)
请检查Java源文件的编码,并检查用于两个字符串的字符集。
这些之间可能存在不匹配,某些编码需要比其他编码更多的字节(例如,请考虑UTF-8与ISO-8859-1)。
确保您的Java源文件使用的是UTF-8而不是ISO-8859-1或特定于Windows的编码,如CP-1252。