Java 要替换前4个字符的正则表达式
我试图编写一个正则表达式,用Java 要替换前4个字符的正则表达式,java,regex,java-11,Java,Regex,Java 11,我试图编写一个正则表达式,用*s替换字符串的前4个字符 例如,对于123456输入,预期输出为*****56 如果输入长度小于4,则仅返回*s 例如,如果输入是123,则返回值必须是***,这是一个简单的解决方案,使用截至。不需要正则表达式 static String hideFirst(String string, int size) { return size < string.length() ? // if string is lon
*
s替换字符串的前4个字符
例如,对于123456
输入,预期输出为*****56
如果输入长度小于4,则仅返回*
s
例如,如果输入是
123
,则返回值必须是***
,这是一个简单的解决方案,使用截至。不需要正则表达式
static String hideFirst(String string, int size) {
return size < string.length() ? // if string is longer than size
"*".repeat(size) + string.substring(size) : // ... replace the part
"*".repeat(string.length()); // ... or replace the whole
}
- 您可能希望将星号(或任何)字符传递给该方法以获得更多控制
- 您可能希望处理
(返回null
/抛出NPE/抛出自定义异常…)null
- 对于较低版本的Java,需要重复字符串
(.{0,4})(.*)
现在,您可以使用Pattern、Matcher和String类来实现所需的功能
Pattern pattern = Pattern.compile("(.{0,4})(.*)");
Matcher matcher = pattern.matcher("123456");
if (matcher.matches()) {
String masked = matcher.group(1).replaceAll(".", "*");
String result = matcher.replaceFirst(masked + "$2");
System.out.println(result);
// 123456 -> ****56
// 123 -> ***
}
简单使用
String masked=String.replaceAll(“(?但是为什么您需要一个正则表达式?使用正则表达式,您可以在之前检查不超过x个字符:这不是所选答案的副本@WiktorStribiżew@bobblebubble,除非你能解释为什么正则表达式是你问题的关键部分,或者以其他方式解释它的意义不同,否则它是重复的。请阅读。
Pattern pattern = Pattern.compile("(.{0,4})(.*)");
Matcher matcher = pattern.matcher("123456");
if (matcher.matches()) {
String masked = matcher.group(1).replaceAll(".", "*");
String result = matcher.replaceFirst(masked + "$2");
System.out.println(result);
// 123456 -> ****56
// 123 -> ***
}