【问题标题】:Encode only specific characters in String仅对字符串中的特定字符进行编码
【发布时间】:2015-06-05 10:17:54
【问题描述】:

我只需要将字符串中的一些特殊字符编码为数值。 说,

String name = "test $#";

我只想对上述字符串中的字符 $# 进行编码。我尝试使用下面的代码,但没有成功。

String encode = URLEncoder.encode(StringEscapeUtils.escapeJava(name), "UTF-8");

编码值会是这样,对于空白,编码值是&#160

【问题讨论】:

  •   是一个不间断的空格。你可以测试:System.out.println("nbsp: " + name.equals("test\u00a0$#"));
  • 在这种情况下,您的空白是non-breaking space
  • 你为什么使用StringEscapeUtils.escapeJava
  • @Phylogenesis 如何将这个不间断的空间转换为  ?
  • 实际上想做什么?首先通过 Java 编码器运行它,然后通过 URI 编码器运行它。

标签: java string character-encoding


【解决方案1】:

如何从数组中拆分该字符串(通过 string#split 方法 - 使用空格作为正则表达式),它返回您可以使用最后一项,您将获得符号,您需要什么 :)

String name = "test $#";
String nameSplittedArr = name.split(" ");
String yourChars = nameSplittedArr[nameSplittedArr.length-1]; //indexes from zero

这应该可行:)

【讨论】:

  • 这只是一个例子。特殊字符可以出现在字符串中的任何位置
【解决方案2】:

根据 cmets,我认为您正在使用自定义编码功能。比如:

public static String EncodeString(String text) {
    StringBuffer sb = new StringBuffer();

    for (char c : text.toCharArray()) {
        if (Character.isLetterOrDigit(c)) {
            sb.append(c);
        } else {
            sb.append("&#" + (int)c + ";");
        }
    }

    return sb.toString();
}

here 就是一个例子。

【讨论】:

  • 感谢您的回答.. 我已经实现了这样的.. 但我个人不想将字符串转换为字符数组并执行 for 循环.. 如果我有 100 个字符字符串,则循环将运行 100 次,这可能会导致性能问题。所以我想要查找和替换之类的东西。
  • @AJJ 为什么这必然会导致性能问题?任何库函数(例如StringEscapeUtils.escapeJava())都将以相同的方式在幕后实现。如果要检查所有字符,必然需要逐个检查每个字符。
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
相关资源
最近更新 更多