正则表达式删除所有不可打印的字符

Pau*_*aul 7 java regex android

我希望从字符串中删除所有不可打印的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;
 }

} 
Run Code Online (Sandbox Code Playgroud)

编辑:我试过[^\x00-\x7F]这是ascii字符的范围....但是然后 符号仍然通过,很奇怪.

abc*_*123 10

以下正则表达式仅匹配可打印文本

[^\x00\x08\x0B\x0C\x0E-\x1F]*
Run Code Online (Sandbox Code Playgroud)

以下正则表达式将找到不可打印的字符

[\x00\x08\x0B\x0C\x0E-\x1F]
Run Code Online (Sandbox Code Playgroud)

Jave代码:

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
}
Run Code Online (Sandbox Code Playgroud)