用"*"替换最后4个字符

11
我有一个字符串,需要用 "*" 符号替换字符串的最后四个字符。请问如何实现?

1
你知道 Stringsubstring() 方法吗? - jmj
请注意,在Java中,字符串是不可变的。因此,您必须像@JigarJoshi所示的那样创建一个新字符串。或者使用“StringBuilder”(或“StringBuffer”),但这在这里可能并不必要。 - Ludovic Kuty
@lkuty 如果你执行 str + "****",实际上底层会使用 StringBuilder - jmj
不知道这个。无论如何,当你使用 substring 时,你会创建一个新的字符串。这就是我想说的。大多数对 String 的方法操作都会创建一个新的 String。除了像你说的那样的 +。通过使用 StringBuilder,我想说他可以使用字符串来实例化一个 StringBuilder,然后替换对象中的字符而不创建一个新的对象,最后用 toString 获取一个字符串。 - Ludovic Kuty
7个回答

14

一种快速简便的方法...

public static String replaceLastFour(String s) {
    int length = s.length();
    //Check whether or not the string contains at least four characters; if not, this method is useless
    if (length < 4) return "Error: The provided string is not greater than four characters long.";
    return s.substring(0, length - 4) + "****";
}

现在你只需要调用replaceLastFour(String s)方法并传入一个字符串参数即可:

像这样:

public class Test {
    public static void main(String[] args) {
        replaceLastFour("hi");
        //"Error: The provided string is not greater than four characters long."
        replaceLastFour("Welcome to StackOverflow!");
        //"Welcome to StackOverf****"
    }

    public static String replaceLastFour(String s) {
        int length = s.length();
        if (length < 4) return "Error: The provided string is not greater than four characters long.";
        return s.substring(0, length - 4) + "****";
    }
}

8

最简单的方法是使用正则表达式:

String s = "abcdefg"
s = s.replaceFirst(".{4}$", "****"); => "abc****"

4
也许举个例子会有帮助:
String hello = "Hello, World!";
hello = hello.substring(0, hello.length() - 4);
// hello == "Hello, Wo"
hello = hello + "****";
// hello == "Hello, Wo****"

3
public class Model {
    public static void main(String[] args) {
        String s="Hello world"; 
        System.out.println(s.substring(0, s.length()-4)+"****");
    }
}

不完全是我想要的,但它帮助我找到了我想要的东西。 - Opeyemi Sanusi

2
您可以使用substring来完成此操作。
String str = "mystring";
str = str.substring(0,str.length()-4);
str = str + "****";

所以,substring需要两个参数。
substring(beginIndex, endIndex);

因此,如果在字符串中调用一个子串方法,它会创建一个新的字符串,该字符串从beginIndex(含)开始,到endIndex(不含)结束。例如:

String str = "roller";
str = str.substring(0,4);
System.out.Println("str");

OUTPUT :

roll

这段代码从 beginIndex 开始截取字符串,一直截取到 endIndex - 1 的位置。

如果您想了解更多有关 substring 的信息,请访问 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html

希望对您有所帮助。


0

这是我保留仅前三个最初字符的解决方案

 /**
 * @param s
 * @return first 3 Characters of s, filled up with * to the Length of s, or s if shorter than 4 Char
 */
static String replaceLastChars(String s) {
    if (StringUtils.isBlank(s) || s.length() < 4) {
        return s;
    }
    return StringUtils.rightPad(s.substring(0, 3), s.length(), '*');
}

以及相应的测试用例

@Test
public void testReplace() {
    assertThat(replaceLastChars(null)).isNull();
    assertThat(replaceLastChars("")).isEqualTo("");
    assertThat(replaceLastChars("abc")).isEqualTo("abc");
    assertThat(replaceLastChars("abcdfg")).isEqualTo("abc***");
}

-2

使用JavaScript的slice方法可以轻松解决你的问题,就像切片一样...看看这个。


var str = "12345678"; console.log(str.slice(0, -4) + "XXXX");

变量str = "12345678"; console.log(str.slice(0, -4) + "XXXX");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接