我有一个字符串,需要用 "*" 符号替换字符串的最后四个字符。请问如何实现?
一种快速简便的方法...
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) + "****";
}
}
最简单的方法是使用正则表达式:
String s = "abcdefg"
s = s.replaceFirst(".{4}$", "****"); => "abc****"
String hello = "Hello, World!";
hello = hello.substring(0, hello.length() - 4);
// hello == "Hello, Wo"
hello = hello + "****";
// hello == "Hello, Wo****"
public class Model {
public static void main(String[] args) {
String s="Hello world";
System.out.println(s.substring(0, s.length()-4)+"****");
}
}
String str = "mystring";
str = str.substring(0,str.length()-4);
str = str + "****";
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
希望对您有所帮助。
这是我保留仅前三个最初字符的解决方案
/**
* @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***");
}
使用JavaScript的slice方法可以轻松解决你的问题,就像切片一样...看看这个。
var str = "12345678"; console.log(str.slice(0, -4) + "XXXX");
变量str = "12345678"; console.log(str.slice(0, -4) + "XXXX");
String
的substring()
方法吗? - jmjstr + "****"
,实际上底层会使用StringBuilder
。 - jmjsubstring
时,你会创建一个新的字符串。这就是我想说的。大多数对String
的方法操作都会创建一个新的String
。除了像你说的那样的+
。通过使用StringBuilder
,我想说他可以使用字符串来实例化一个StringBuilder
,然后替换对象中的字符而不创建一个新的对象,最后用toString
获取一个字符串。 - Ludovic Kuty