首页 > 解决方案 > Java - 替换所有重音符号,但保留版权、商标和注册等符号

问题描述

mystr="MYCOMPANY® PREMIER VISA SIGNATURE® CARD"

我尝试了以下方法,但它没有删除 Â。

mystr= Normalizer.normalize(mystr, Normalizer.Form.NFD)
mystr= Pattern.compile("\\p{InCOMBINING_DIACRITICAL_MARKS}+").matcher(mystr).replaceAll("");

除了版权,商标和注册等字符外,有没有办法从上面的字符串中删除重音字符。

expectedString = "MYCOMPANY® PREMIER VISA SIGNATURE® CARD"

标签: javastringunicodeasciinon-ascii-characters

解决方案


您可以使用StringUtils.stripAccents(string);Apache Commons Lang 实现此目的。
它会从字符中删除重音符号,但不会删除它,因此为了获得您想要的结果,我比较了两个字符串并将常用字符附加到新字符串中。从他们的网站
下载最新版本的二进制文件,或者您可以直接从此链接下载 JAR 。 通过 IDE 添加 JAR 库并将其导入代码中,如下所示:

import org.apache.commons.lang3.StringUtils;

public class Solution
{
    public static void main(String args[])
    {
        String string1 = "MYCOMPANY® PREMIER VISA SIGNATURE® CARD";
        String string2 = StringUtils.stripAccents(string1);
        int n = string1.length();
        char[] arr1 = string1.toCharArray();
        char[] arr2 = string2.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int t = 0; t < n; t++)
            if(arr1[t] == arr2[t]) sb.append(arr2[t]);         
        System.out.println(sb);
    }
}

它给出了输出:

MYCOMPANY® PREMIER VISA SIGNATURE® CARD

推荐阅读