如何使用参数屏蔽 Java 中除最后 4 个字符以外的所有字符串字符?
How to i mask all string characters except for the last 4 characters in Java using parameters?
我想知道如何屏蔽除最后 4 个字符串之外的任意数量的字符串字符。
我想使用 "X"
屏蔽所有字符串
例如
Number:"S1234567B"
结果
Number :"XXXXX567B
谢谢大家
您可以使用 StringBuilder
.
StringBuilder sb = new StringBuilder("S1234567B");
for (int i = 0 ; i < sb.length() - 4 ; i++) { // note the upper limit of the for loop
// sets every character to X until the fourth to last character
sb.setCharAt(i, 'X');
}
String result = sb.toString();
解决方案 1
您可以使用正则表达式来完成。
这是最短的解决方案。
static String mask(String input) {
return input.replaceAll(".(?=.{4})", "X");
}
正则表达式匹配任何单个字符 (.
) 后跟 (zero-width positive lookahead) 至少 4 个字符 ((?=.{4})
)。用 X
.
替换每个这样的单个字符
解决方案 2
您可以通过获取 char[]
1、更新它并构建新字符串来实现。
这是最快的解决方案,并且使用最少的内存。
static String mask(String input) {
if (input.length() <= 4)
return input; // Nothing to mask
char[] buf = input.toCharArray();
Arrays.fill(buf, 0, buf.length - 4, 'X');
return new String(buf);
}
1) 比使用 StringBuilder
.
更好
解决方案 3
您可以使用在 Java 11.
中添加到 String
的 repeat(int count)
方法来完成
这可能是最容易理解的解决方案。
static String mask(String input) {
int maskLen = input.length() - 4;
if (maskLen <= 0)
return input; // Nothing to mask
return "X".repeat(maskLen) + input.substring(maskLen);
}
您可以在 java 中的 StringBuilder
的帮助下完成,如下所示,
String value = "S1234567B";
String formattedString = new StringBuilder(value)
.replace(0, value.length() - 4, new String(new char[value.length() - 4]).replace("[=10=]", "x")).toString();
System.out.println(formattedString);
我的class掩码简单String
class MaskFormatter(private val pattern: String, private val splitter: Char? = null) {
fun format(text: String): String {
val patternArr = pattern.toCharArray()
val textArr = text.toCharArray()
var textI = 0
for (patternI in patternArr.indices) {
if (patternArr[patternI] == splitter) {
continue
}
if (patternArr[patternI] == 'A' && textI < textArr.size) {
patternArr[patternI] = textArr[textI]
}
textI++
}
return String(patternArr)
}
}
示例使用
MaskFormatter("XXXXXAAAA").format("S1234567B") // XXXXX567B
MaskFormatter("XX.XXX.AAAA", '.').format("S1234567B") // XX.XXX.567B
MaskFormatter("**.***.AAAA", '.').format("S1234567B") // **.***.567B
MaskFormatter("AA-AAA-AAAA",'-').format("123456789") // 12-345-6789
我想知道如何屏蔽除最后 4 个字符串之外的任意数量的字符串字符。 我想使用 "X"
屏蔽所有字符串例如
Number:"S1234567B"
结果
Number :"XXXXX567B
谢谢大家
您可以使用 StringBuilder
.
StringBuilder sb = new StringBuilder("S1234567B");
for (int i = 0 ; i < sb.length() - 4 ; i++) { // note the upper limit of the for loop
// sets every character to X until the fourth to last character
sb.setCharAt(i, 'X');
}
String result = sb.toString();
解决方案 1
您可以使用正则表达式来完成。
这是最短的解决方案。
static String mask(String input) {
return input.replaceAll(".(?=.{4})", "X");
}
正则表达式匹配任何单个字符 (.
) 后跟 (zero-width positive lookahead) 至少 4 个字符 ((?=.{4})
)。用 X
.
解决方案 2
您可以通过获取 char[]
1、更新它并构建新字符串来实现。
这是最快的解决方案,并且使用最少的内存。
static String mask(String input) {
if (input.length() <= 4)
return input; // Nothing to mask
char[] buf = input.toCharArray();
Arrays.fill(buf, 0, buf.length - 4, 'X');
return new String(buf);
}
1) 比使用 StringBuilder
.
解决方案 3
您可以使用在 Java 11.
中添加到 String
的 repeat(int count)
方法来完成
这可能是最容易理解的解决方案。
static String mask(String input) {
int maskLen = input.length() - 4;
if (maskLen <= 0)
return input; // Nothing to mask
return "X".repeat(maskLen) + input.substring(maskLen);
}
您可以在 java 中的 StringBuilder
的帮助下完成,如下所示,
String value = "S1234567B";
String formattedString = new StringBuilder(value)
.replace(0, value.length() - 4, new String(new char[value.length() - 4]).replace("[=10=]", "x")).toString();
System.out.println(formattedString);
我的class掩码简单String
class MaskFormatter(private val pattern: String, private val splitter: Char? = null) {
fun format(text: String): String {
val patternArr = pattern.toCharArray()
val textArr = text.toCharArray()
var textI = 0
for (patternI in patternArr.indices) {
if (patternArr[patternI] == splitter) {
continue
}
if (patternArr[patternI] == 'A' && textI < textArr.size) {
patternArr[patternI] = textArr[textI]
}
textI++
}
return String(patternArr)
}
}
示例使用
MaskFormatter("XXXXXAAAA").format("S1234567B") // XXXXX567B
MaskFormatter("XX.XXX.AAAA", '.').format("S1234567B") // XX.XXX.567B
MaskFormatter("**.***.AAAA", '.').format("S1234567B") // **.***.567B
MaskFormatter("AA-AAA-AAAA",'-').format("123456789") // 12-345-6789