首页 > 解决方案 > java - 如何替换char数组中的Char序列而不将其转换为Java中的String

问题描述

给定一个 char[],需要将 char[] 中的一个 char 序列替换为空字符串。我通过将 char[] 转换为字符串并使用替换方法来实现它。但我需要避免将 char[] 转换为 String,因为它包含敏感数据。如何在不转换为字符串的情况下在 char[] 中替换它?

当前代码,

char[] chars = charArray;
String str = String.valueOf(chars)
                        .replaceAll("(.*?)-----", "")
                        .replaceAll("\\s", "");

标签: javaarraysregexreplacechar

解决方案


AMatcher接受CharBuffer您可以轻松获得的a CharBuffer.wrap(chars)。对于输出,您可以使用 a StringBuilderwhich 在内部不使用字符串。当你完成处理后,你可以用getChars(...)方法把字符取出来。

char[] chars = {'a','b','c','d','-','-','-','-','-','e','f','g','h'};

Pattern p = Pattern.compile("(.*?)-----");
Matcher m = p.matcher(CharBuffer.wrap(chars));

StringBuilder sb = new StringBuilder();
while (m.find()) {
    m.appendReplacement(sb, "");
}
m.appendTail(sb);

chars = new char[sb.length()];
sb.getChars(0, sb.length(), chars, 0);

System.out.println(Arrays.toString(chars)); // output: [e, f, g, h]

推荐阅读