2

PHPでは、これを使用します:

$text = "Je prends une thé chaud, s'il vous plaît";
$search = array('é','î','è'); // etc.
$replace = array('e','i','e'); // etc.
$text = str_replace($search, $replace, $text); 

しかし、Java String メソッドの「replace」は、配列を入力として受け入れないようです。これを行う方法はありますか (配列を通過するために for ループに頼る必要はありません)?

私が試みている方法よりもエレガントな方法があれば教えてください。

4

6 に答える 6

3

これを行うための非常に優れた方法は、Apache Commons Lang 2.4 のクラスのreplaceEach()メソッドStringUtilsを使用することです。

String text = "Je prends une thé chaud, s'il vous plaît";
String[] search = new String[] {"é", "î", "è"};
String[] replace = new String[] {"e", "i", "e"};
String newText = StringUtils.replaceEach(text, 
                search, 
                replace);

結果は

Je prends une the chaud, s'il vous plait
于 2009-06-19T09:13:25.473 に答える
2

標準 API には PHP と同じように動作するメソッドはありませんが、Apache Commons にはあるかもしれません。文字を個別に置き換えることでそれを行うことができます:

s = s.replace('é','e').replace('î', 'i').replace('è', 'e');

置換する文字を列挙する必要がない(したがって、何も見逃す可能性が高くなります)が、ループ(使用する方法にかかわらず内部的に発生する)が必要な、より洗練された方法は、java.text.Normalizer文字を区切るために使用することですと分音記号を付けてから、文字タイプが のすべてを取り除きCharacter.MODIFIER_LETTERます。

于 2009-06-19T09:13:13.570 に答える
2

私は Java の専門家ではありませんが、Normalizer クラスを使用してアクセント付き文字を分解し、Unicodeの「COMBINING」文字を削除する一般的なソリューションをお勧めします。

于 2009-06-19T10:03:29.290 に答える
1

ループを実行する必要があります。

String text = "Je prends une thé chaud, s'il vous plaît";
Map<Character, String> replace = new HashMap<Character, String>();
replace.put('é', "e");
replace.put('î', "i");
replace.put('è', "e");
StringBuilder s = new StringBuilder();
for (int i=0; i<text.length(); i++) {
  char c = text.charAt(i);
  String rep = replace.get(c);
  if (rep == null) {
    s.append(c);
  } else {
    s.append(rep);
  }
}
text = s.toString();

注:一部の文字は複数の文字に置き換えられます。たとえば、ドイツ語では、u-umlaut は「ue」に変換されます。

編集:はるかに効率的になりました。

于 2009-06-19T08:55:03.233 に答える
0

私の知る限り、標準的なメソッドはありませんが、これがあなたが望むことをするクラスです:

http://www.javalobby.org/java/forums/t19704.html

于 2009-06-19T08:59:45.737 に答える
0

ループが必要になります。

効率的な解決策は、次のようなものです。

    Map<Character, Character> map = new HashMap<Character, Character>();
    map.put('é', 'e');
    map.put('î', 'i');
    map.put('è', 'e');

    StringBuilder b = new StringBuilder();
    for (char c : text.toCharArray())
    {
        if (map.containsKey(c))
        {
            b.append(map.get(c));
        }
        else
        {
            b.append(c);
        }
    }
    String result = b.toString();

もちろん、実際のプログラムでは、マップの構築と置換の両方をそれぞれのメソッドにカプセル化します。

于 2009-06-19T09:10:59.783 に答える