4

在现有帖子Java remove HTML from String without regular expressions中 tucuxi 的帮助下,我构建了一个方法,可以从字符串中解析出任何基本的 HTML 标记。但是,有时原始字符串包含 html 十六进制字符,例如 é(它是重音 e)。我已经开始添加将这些转义字符转换为真实字符的功能。

您可能会问:为什么不使用正则表达式?还是第三方库?不幸的是,我不能,因为我在不支持正则表达式的 BlackBerry 平台上进行开发,而且我从未能够成功地将第三方库添加到我的项目中。

所以,我已经到了将任何 é 替换为“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();
 }

谢谢!

4

4 回答 4

5

Java 字符串是 unicode。

sb += '\u00E9';   # lower case  e + '
sb += '\u00C9';   # upper case  E + '
于 2010-04-18T04:25:32.657 回答
2

您可以在 Java 中打印出您喜欢的任何字符,因为它使用 Unicode 字符集。

要找到您想要的角色,请查看此处的图表:

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

在 Latin Supplement 文档中,您将看到重音字符的所有 unicode 数字。例如,您应该看到为 é 列出的十六进制数字 00E9。所有拉丁重音字符的数字都在本文档中,因此您应该会发现这非常有用。

要在字符串中打印使用字符,只需使用 \u 的 Unicode 转义序列,后跟字符代码,如下所示:

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

会产生:“我们去咖啡馆吧”

根据您使用的 Java 版本,您可能会发现 StringBuilders(或 StringBuffers,如果您是多线程的)也比使用 + 运算符连接字符串更有效。

于 2010-04-18T08:45:14.367 回答
0

试试这个:

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

代替

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

问题是你没有在“e”字符的顶部添加重音,而是一个单独的字符。该站点列出了字符的 ascii 代码。

于 2010-04-18T04:24:32.040 回答
0

有关 Java 中的重音字符表,请查看此参考

要解码 html 部分,请使用Apache commons lang中的 Apache StringEscapeUtils

import org.apache.commons.lang.StringEscapeUtils; ... String withCharacters = StringEscapeUtils.unescapeHtml(yourString);

另请参阅此 Stack Overflow 线程: Replace HTML codes with equivalent characters in Java

于 2018-07-06T13:51:58.453 回答