0

为了过滤坏词,我发现java中的'replace'函数并不像预期的那么方便。请在代码下方找到:例如:考虑单词“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函数也会替换重复的字母。为什么会这样?我想过滤不包括第一个和最后一个字母的单词。

4

5 回答 5

4

这是因为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));
于 2013-04-19T09:33:41.247 回答
0

由于String.replace(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);
于 2013-04-19T09:33:51.827 回答
0

您应该使用 replaceAll-Function: Link

有了这个,您可以替换所有在字符串中找到给定子字符串(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);
于 2013-04-19T09:33:56.980 回答
0

看起来,如果单词有重复的字母(如这里),replace 函数也会替换重复的字母。为什么会这样?

为什么?因为这就是它的工作原理,正如 API 文档String.replace(char oldChar, char 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);
于 2013-04-19T09:35:27.580 回答
0
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);
}
于 2013-04-19T09:36:04.597 回答