2011-12-10 3 views
0

アクセント付きの文字をアクセント付きの文字に置き換えることを目的としたこの小さなコードがあります。Windowsで動作しているcharAt問題

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は元の文字列変数のな長さです。したがって、loop条件が0と33の間でループのループが起こります。i < original.lenght() ...

私は、try ... catch行を追加してコードを変更しています。

コードの何が間違っていますか?

答えて

3

Javaソースファイルのエンコーディングを確認し、両方の文字列に使用されている文字セットも確認​​してください。

これらの間に不一致があり、一部のエンコードでは特殊文字の場合よりも多くのバイトが必要になる場合があります(たとえば、UTF-8とISO-8859-1の違いを考えてください)。

JavaソースファイルがISO-8859-1ではなく、CP-1252などのWindows固有のエンコーディングではなく、UTF-8を使用していることを確認してください。

関連する問題