我希望从字符串中删除所有不可打印的 ascii 字符,同时保留不可见的字符。我认为这会起作用,因为空格, \n \r 是不可见字符,但不是不可打印的?
基本上我得到一个字节数组,其中包含 � 字符,但我不希望它们出现在其中。所以我尝试将其转换为字符串,删除 � 字符,然后再次将其用作字节数组。
空格现在在我的代码中工作正常,但是现在 \r 和 \n 不起作用。保留这些的正确正则表达式是什么?或者有比我正在做的更好的方法吗?
public void write(byte[] bytes, int offset, int count) {
try {
String str = new String(bytes, "ASCII");
str2 = str.replaceAll("[^\\p{Print}\\t\\n]", "");
GraphicsTerminalActivity.sendOverSerial(str2.getBytes("ASCII"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return;
}
}
编辑:我尝试了 [^\x00-\x7F] 这是 ascii 字符的范围......但是然后 � 符号仍然通过,很奇怪。
以下正则表达式将仅匹配可打印文本
[^\x00\x08\x0B\x0C\x0E-\x1F]*
以下正则表达式将查找不可打印的字符
[\x00\x08\x0B\x0C\x0E-\x1F]
Java代码:
boolean foundMatch = false;
try {
Pattern regex = Pattern.compile("[\\x00\\x08\\x0B\\x0C\\x0E-\\x1F]");
Matcher regexMatcher = regex.matcher(subjectString);
foundMatch = regexMatcher.find();
//Relace the found text with whatever you want
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)