[英]Filter bad words | java 'replace'
为了过滤坏词,我发现Java中的“替换”功能没有预期的方便。 请在下面的代码中找到:例如:考虑单词“ abcde”,我想将其过滤为“ a *** e”。
String test = "abcde";
for (int i = 1; i < sdf.length() - 1; i++) {
test= test.replace(test.charAt(i), '*');
}
System.out.print(test);
输出: a***e
但是,如果String为String test = "bbcde";
,输出为****e
。 看来,如果单词具有重复字母(如此处所示),则replace
函数也将替换重复字母。 为什么会这样呢? 我想过滤掉不包括第一个和最后一个字母的单词。
这是因为String.replace(char, char)
替换了所有出现的第一个字符(根据其Javadoc )。
您想要的可能更像这样:
char[] word = test.toCharArray();
for (int i = 1; i < word.lengh - 1; i++) { // make sure to start at second char, and end at one-but-last char
word[i] = '*';
}
System.out.println(String.copyValueOf(word));
由于String.replace(char, char)
替换所有出现的指定char,因此这将是满足您要求的更好方法:
String test = "abcde";
String replacement = "";
for (int i = 0; i < sdf.length(); i++) {
replacement += "*";
}
test= test.replace(sdf, replacement );
System.out.print(test);
您应该使用replaceAll-Function: 链接
使用此方法,您可以替换所有时间,都可以在字符串(fe“ abcde”)中找到给定的子字符串,并将所有这些替换为另一个字符串(fe“ a *** e”)。
String test = "abcde";
String replacement = "";
for (int i = 0; i < test.length(); i++) {
if (i==0 || i==test.length()-1){
replacement += test.charAt(i);
} else {
replacement += "*";
}
}
sdf = sdf.replaceAll(test, replacement);
System.out.print(test);
看来,如果单词具有重复字母(如此处所示),则replace函数也将替换重复字母。 为什么会这样呢?
为什么? 因为这就是它的工作方式,所以正如String.replace(char oldChar, char newChar)
的API文档所说:
返回一个新字符串,该字符串是用
newChar
替换此字符串中所有出现的oldChar
newChar
。
如果只想用第一个字母,一些星号和最后一个字母替换字符串的内容,则根本不需要使用replace
。
String test = "abcde";
if (test.length() >= 1) {
StringBuilder result = new StringBuilder();
result.append(test.charAt(0));
for (int i = 0; i < test.length() - 2; ++i) {
result.append('*');
}
result.append(test.charAt(test.length() - 1));
test = result.toString();
}
System.out.println(test);
public static void main(String[] args) {
String test = "bbcde";
String output = String.valueOf(test.charAt(0));
for (int i = 1; i < test.length() - 1; i++) {
output = output + "*";
}
output = output + String.valueOf(test.charAt(test.length() - 1));
System.out.print(output);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.