java - 如何用 unicode 字符替换 String

标签 java

我打算将普通字符串替换为分割字符串,但是普通字符串之间存在长度差异,为 62,而分割长度结果为 117,所以当我们写入 'a' 按钮时不会更改为“𝕒”是否有另一种更容易编写替换字符串的方法?

public static String doublestruck(String input){
    String normal = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String split = "𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ";

    String output = "";
    char letter;
    for(int i = 0; i < input.length(); i++){
        letter = input.charAt(i);
        int a = normal.indexOf(letter);
        output += (a != -1) ? split.charAt(a):letter;
    }
    return new StringBuilder(output).toString();
}

最佳答案

像 𝟜 (U+1D7DC) 这样的字母不在 the Basic Multilingual Pane 中。因此在 Java 中占用两个 char 值。

您需要使用 codePointAt 而不是 charAt要找到正确的偏移量,您需要使用 offsetByCodePoint而不是直接使用相同的索引。因此 split.charAt(a) 需要替换为 split.codePointAt(spli.offsetByCodePoint(0, a))

关于java - 如何用 unicode 字符替换 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786834/

相关文章:

java - 安卓|如何在 ScrollView 中使用 ExpandableListView?

JAVA 在 "if"语句中出现空指针异常?

java - 在 AppEngine 上使用 Java Executor 导致 AccessControlException

java - Android 为什么 setLayoutParams 不设置 CustomView 大小?

java - 如何修复 ClassCastExecption 和 NullPointerException?

Java Swing - 鼠标进入JFrame后组件消失

java - 添加没有 JPanel 的组件是正确的事情

java - 滚动时回收器查看项目淡出动画

java - 如何在pdfBox中绘制虚线

java - 如何正确停止ServerSocket线程?关闭套接字失败