如何在 Java 中使条件 StringUtils 小于特定字符



我写了一个字符串类,屏蔽用户名

;输入 --> 约翰尼·霍洛威期望输出---> J***y H***y

及其工作。

但是,如果用户输入的姓名少于 3 个字符,我喜欢更改我的代码

例; 名称 BR ---> B***R ;姓氏 --> KL ---> K***L

如何根据上面的例子更改我的代码

我的代码如下;

public class MaskWords {
public String mask(String str) {
if (StringUtils.isBlank(str)) {
return str;
}
String out = "";
for (String d : str.split("\s+")) {
String startChar = d.substring(0, 1);
String endChar = d.substring(d.length() - 1, d.length());
out = out + startChar + "***" + endChar + " ";
}
return out.trim();
}
public List<String> mask(List<String> str) {
List<String> maskedStringList = new ArrayList<>();
for (String stringToMask : str) {
maskedStringList.add(mask(stringToMask));
}
return maskedStringList;
}  

以不同的方式处理情况,对于 2 个字符,它可以是相同的。

为了使代码更好,请不要使用 char (UTF-16(,而是使用 Unicode 代码点。 有时 Unicode 码位、符号使用 2 个字符:中文、表情符号。所以更一般 将:

StringBuilder out = new StringBuilder(str.length + 10);
for (String d : str.split("\s+")) {
int codePoints = d.codePointCount(0, d.length());
if (codePoints >= 2) {
int startChar = d.codePointAt(0);
int endChar = d.codePointBefore(d.length());
out.appendCodePoint(startChar).append("***").appendCodePoint(endChar).append(' ');
} else if (codePoints == 1) {
out.append(d).append("***").append(' ');
// Or: out.append("* ");
}
}
return out.toString().trim();

用 1 个代码点,我做了X***(更好的*(,但如果需要,X***X将被第一个 if 覆盖,对于> 0。

StringBuilder更快,它的appendCodePoint在这里很有用。

相关内容

  • 没有找到相关文章

最新更新