我有一个包含大量文字的字符串。其中有一些奇怪的字符如下:█✖✔♫♫▬★
这只是我迄今为止发现的一小部分内容。我尝试使用replaceAll方法但它似乎不起作用。是否有一个所有这些类型的角色的集合,或者更好的是,一个能够删除它们的库?
答案 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)之间)