首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串中的特殊字符替换为它们的UTF-8编码字符java?

将字符串中的特殊字符替换为它们的UTF-8编码字符java?
EN

Stack Overflow用户
提问于 2016-07-06 18:52:25
回答 2查看 5.6K关注 0票数 1

我只想将特殊字符转换为它们的UTF-8等效字符。例如,给定一个字符串:Abcds23#$_ss,它应该被转换为Abcds23353695ss

下面是我如何完成上述转换的:#的十六进制utf-8是23,十进制是35。$的十六进制utf-8是24,十进制是36。_的十六进制utf-8是5f,十进制是95。

我知道我们有String.replaceAll(String regex, String replacement)方法。但是我想用特定的UTF-8等效项替换特定的字符。

我如何在java中做同样的事情?

EN

回答 2

Stack Overflow用户

发布于 2016-07-06 19:28:14

我不知道你是如何定义“特殊字符”的,但是这个函数应该给你一个概念:

代码语言:javascript
复制
public static String convert(String str) 
{
    StringBuilder buf = new StringBuilder();
    for (int index = 0; index < str.length(); index++)
    {
        char ch = str.charAt(index);
        if (Character.isLetterOrDigit(ch))
            buf.append(ch);
        else
            buf.append(str.codePointAt(index));
    }
    return buf.toString();
}

@Test
public void test()
{
    Assert.assertEquals("Abcds23353695ss", convert("Abcds23#$_ss"));
}
票数 0
EN

Stack Overflow用户

发布于 2016-07-06 19:52:35

下面使用java 8或更高版本,检查Unicode代码点(符号)是字母还是数字,纯ASCII (< 128),否则将Unicode代码点输出为数值字符串。

代码语言:javascript
复制
static String convert(String str) {
    int[] cps = str.codePoints()
            .flatMap((cp) ->
                Character.isLetterOrDigit(cp) && cp < 128
                ? IntStream.of(cp)
                : String.valueOf(cp).codePoints())
                    .toArray();
    return new String(cps, 0, cps.length);
}

String.codePoints()生成一个IntStream,flatMap在单个扁平流中添加IntStreams,toArray将其收集到一个数组中。所以我们可以从这些代码点构造一个新的字符串。完全Unicode安全。

没有分隔符,转换是不可撤消的。

Unicode上的

Unicode对符号进行编号,称为代码点,从0向上,进入3字节范围。

要以字节进行编码(格式化),存在UTF-8 (多字节)、UTF-16LEUTF-16BE (2字节序列)和UTF-32 (码位按原样或多或少)。.class文件中的Java string常量采用UTF8格式。一个字符串由UTF-16BE char组成,字符串可以给出如上的代码点。所以java在设计上使用Unicode作为文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38222253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档