如何使用Java检测和替换字符串中不可打印的字符?

如何使用Java检测和替换字符串中不可打印的字符?,java,replace,character,non-printable,Java,Replace,Character,Non Printable,例如,我有这样一个字符串:abc123[*]xyz[#]098[~]f9e [*]、[#]和[~]表示3个不同的不可打印字符。 在Java中如何用“X”替换它们 Frank展示了一种用Java测试给定字符是否可打印的方法 您肯定知道,在Java中,您不能直接更改字符串:相反,您可以创建一个用字符串初始化的新对象,更改字符串生成器对象(例如,使用setCharAt调用,其中上述方法显示该索引处的字符不可打印),最后在string builder对象上调用toString,创建一个新的string对

例如,我有这样一个字符串:abc123[*]xyz[#]098[~]f9e

[*]、[#]和[~]表示3个不同的不可打印字符。 在Java中如何用“X”替换它们

Frank展示了一种用Java测试给定字符是否可打印的方法


您肯定知道,在Java中,您不能直接更改字符串:相反,您可以创建一个用字符串初始化的新对象,更改字符串生成器对象(例如,使用
setCharAt
调用,其中上述方法显示该索引处的字符不可打印),最后在string builder对象上调用
toString
,创建一个新的string对象,您可以从方法返回该对象,或者根据您的具体需要将其指定给用于引用原始字符串的相同标识符等。

我不确定是否理解您的问题。如果您能更好地表达它,我认为一个简单的正则表达式替换可能就是您所需要的

String r = s.replaceAll(REGEX, "X");
REGEX取决于您需要什么:

"\\*|#|~"   : matches only '*', "#', and '~'
"[^\\d\\w]" : matches anything that is neither a digit nor a word character
"\\[.\\]"   : matches '[' followed by ANY character followed by ']'
"(?<=\\[).(?=\\])" : matches only the character surrounded by '[' and ']'
“\\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
“[^\\d\\w]”:匹配既不是数字字符也不是单词字符的任何内容
“\\[.\]”:匹配“[”后跟任何字符,后跟“]”
“(?可能的副本