簡體   English   中英

用Java替換外來英文字符的方法?

[英]Method to substitute foreign for English characters in Java?

在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循環來通過數組)?

請說是否比我正在嘗試的方法更優雅。

一個非常好的方法是使用Apache Commons Lang 2.4中StringUtils類的replaceEach()方法

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

雖然Apache Commons中可能存在某些內容,但沒有任何方法與標准API中的PHP相同。 你可以通過單獨替換字符來實現:

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

一個更復雜的方法,不需要你枚舉要替換的字符(因此更可能不會遺漏任何東西),但需要一個循環(無論如何在內部發生,無論你使用什么方法)都將使用java.text.Normalizer分隔字母和變音符號然后刪除字符類型為Character.MODIFIER_LETTER

我不是Java人,但我建議使用Normalizer類來分解重音字符,然后刪除Unicode “COMBINING”字符的通用解決方案。

你將不得不做一個循環:

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”。

編輯:制造這是非常有效。

據我所知,目前還沒有標准的方法,但這里有一個可以滿足您需求的課程:

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

你需要一個循環。

一個有效的解決方案將是如下:

    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();

當然,在實際程序中,您將封裝地圖的構造和各自方法中的替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM