我的字符串是“ test ” “test”有4个字符 我想用“****”替换“test” 所以我得到了“ **** ”
我的代码
ordered
但它用1 *代替测试。
答案 0 :(得分:3)
如果单词test
只是一个示例,您可以使用Matcher.appendReplacement
(有关此技术的详情,请参阅How to appendReplacement on a Matcher group instead of the whole pattern?):
String fileText = "_test_";
String pattern = "test";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(fileText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, repeat("*", m.group(0).length()));
}
m.appendTail(sb); // append the rest of the contents
System.out.println(sb);
repeat
函数(从Simple way to repeat a String in java借用,请参见其他选项)SO帖子是:
public static String repeat(String s, int n) {
if(s == null) {
return null;
}
final StringBuilder sb = new StringBuilder(s.length() * n);
for(int i = 0; i < n; i++) {
sb.append(s);
}
return sb.toString();
}
请参阅IDEONE demo
答案 1 :(得分:0)
是的,因为replaceAll(str1, str2)
会将所有str1
替换为str2
。由于您使用文字,您需要说
System.out.println("_test_".replaceAll("test", "****"));
如果您想要自己的替换功能,可以执行以下操作:
public static String replaceStringWithChar(String src, String seek, char replacement)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < seek.length(); i++) sb.append(replacement);
return src.replaceAll(seek, sb.toString());
}
然后你会这样称呼它:
replaceStringWithChar("_test_", "test", '*');
答案 2 :(得分:0)
如果您要替换任意文本,并且想要使用replaceAll()
,请注意它需要正则表达式,并且各种字符具有特殊含义。要预防问题,请致电Pattern.quote()
。
另外,要用等长的*
序列替换,你需要构建一个这样的字符串。
这是一个很好的简短方法:
private static String mask(String input, String codeword) {
char[] buf = new char[codeword.length()];
Arrays.fill(buf, '*');
return input.replaceAll(Pattern.quote(codeword), new String(buf));
}
<强>测试强>
System.out.println(mask("_test_", "test"));
System.out.println(mask("This is his last chance", "is"));
<强>输出强>
_****_
Th** ** h** last chance
答案 3 :(得分:0)
所以我得到了答案,我真的很想找 尽可能少的东西。谢谢你们 对于答案,但这是我发现最有用的答案。
我很抱歉在问题中不清楚,如果我不是。
String str1 = "_AnyString_";
int start_underscore = str1.indexOf("_");
int end_underscore = str1.indexOf("_", start_underscore + 1);
String str_anything = str1.substring(start_underscore + 1, end_underscore);
String str_replace_asterisk = str_anything.replaceAll(".", "*");
System.out.println(str_replace_asterisk);
str1 = str1.replace(str_anything, str_replace_asterisk);
System.out.println(str1);
输出:
_AnyString_
_*********_
答案 4 :(得分:-1)
实际上你 非常接近 你想要的东西。这就是你能做的:
System.out.println("_test_".replaceAll("[test]", "*"));
System.out.println("hello".replaceAll("[el]", "*"));
<强>输出:强>
_****_
h***o