2010-04-18 69 views
4

在現有文章Java remove HTML from String without regular expressions的tucuxi的幫助下,我已經構建了一個方法來解析出字符串中的任何基本HTML標記。然而,有時候,原始字符串包含html十六進制字符,如&#x00E9(這是一個帶重音的e)。我已經開始添加將這些轉義字符轉換爲真實字符的功能。Java如何添加重音符號「e」到字符串?

您可能會問:爲什麼不使用正則表達式?還是第三方圖書館?不幸的是,我不能,因爲我正在開發一個不支持正則表達式的黑莓平臺,而且我從未能夠成功地將第三方庫添加到我的項目中。

所以,我已經到了任何&#x00E9被替換爲「e」的點。我現在的問題是,我如何在字符串中添加一個實際的'重音e'?

這裏是我的代碼:

公共靜態字符串removeHTML(字符串簡介){

char[] cs = synopsis.toCharArray(); 
    String sb = new String(); 
    boolean tag = false; 
    for (int i = 0; i < cs.length; i++) { 
    switch (cs[i]) { 
    case '<': 
    if (!tag) { 
    tag = true; 
    break; 
    } 
    case '>': 
    if (tag) { 
    tag = false; 
    break; 
    } 
    case '&': 

    char[] copyTo = new char[7]; 
    System.arraycopy(cs, i, copyTo, 0, 7); 

    String result = new String(copyTo); 

    if (result.equals("&#x00E9")) { 
    sb += "e"; 
    } 

    i += 7; 
    break; 
    default: 
    if (!tag) 
    sb += cs[i]; 
    } 
    } 

    return sb.toString(); 
} 

謝謝!

+0

誰投了下來?爲什麼? – Joel 2010-04-18 04:37:45

+0

@Joel:我想知道同樣的事情...... – Jaxidian 2010-04-18 04:39:52

回答

4

Java字符串是unicode。

sb += '\u00E9'; # lower case e + ' 
sb += '\u00C9'; # upper case E + ' 
+0

這對我有用,感謝您的幫助! – littleK 2010-04-18 04:39:42

0

試試這個:

if (result.equals("&#x00E9")) { 
    sb += char(130); 
    } 

代替

if (result.equals("&#x00E9")) { 
    sb += "e"; 
    } 

的事情是,你不添加口音的「E」字的頂部,而是一個獨立的性格一起。這site列出了字符的ascii代碼。

2

您可以使用Unicode字符集打印出您喜歡的任何字符。

要找到你想看看這裏的圖表文字:

http://www.unicode.org/charts/

在拉丁語補充文件,你會看到所有的重音字符的Unicode數字。例如,您應該看到列出的十六進制數字00E9。所有拉丁語重音字符的數字都在本文檔中,所以您應該覺得這非常有用。

要打印使用的字符的字符串,只是使用的\ u加上字符代碼,像這樣的Unicode轉義序列:

System.out.print("Let's go to the caf\u00E9"); 

將產生:「讓我們去咖啡廳」

根據你使用的Java版本,你可能會發現StringBuilders(或者是StringBuffers,如果你是多線程的話)比使用+運算符來連接字符串更高效。

相關問題