从java中的String中删除非标准字符

时间:2016-03-11 14:04:42

标签: java string unicode

我有一个包含大量文字的字符串。其中有一些奇怪的字符如下:█✖✔♫♫▬★

这只是我迄今为止发现的一小部分内容。我尝试使用replaceAll方法但它似乎不起作用。是否有一个所有这些类型的角色的集合,或者更好的是,一个能够删除它们的库?

2 个答案:

答案 0 :(得分:2)

迭代字符并检查每个字符是否属于您定义为"标准" (这里的类别是:字母,数字,空格或应用于先前接受的字符的修饰符):

static String standartize(String s) {
    if (s == null) return null;
    StringBuilder sb = new StringBuilder();
    boolean based = false;    // is previous character accepted base for modifier?
    int c;
    for (int i = 0; i < s.length(); i += Character.charCount(c)) {
        c = Character.codePointAt(s, i);            
        if (based && Character.getType(c) == Character.MODIFIER_SYMBOL) {  
            sb.appendCodePoint(c);               
        } else if (Character.isAlphabetic(c) || Character.isDigit(c)) {
            sb.appendCodePoint(c);
            based = true;
        } else if (Character.isWhitespace(c)) {
            sb.appendCodePoint(c);
            based = false;
        } else {
            based = false;
        }
    }
    return sb.toString();
}

您可以在else if中添加/删除支票,以扩大/缩小您考虑的字符范围&#34;标准&#34;:Character有许多静态isXxxx()方法来测试一个角色属于某个类别。

请注意,迭代不是char个项目,而是int个代码点。这不仅可以处理UTF-16字符,还可以处理代理对。

答案 1 :(得分:0)

如果您只想在字符串中使用ASCII字符,则可以遍历字符串的长度并检查其中ASCII值是介于65 - 90(AZ)还是97 - 122(az)或48-57(0 - 9)之间)