我有一个字符串,例如这个:
stackoverflow
我想在Java(Android)中获得以下输出:
s***********w
所以我们保留第一个和最后一个字母,但其他字母被这个符号“*”替换。我希望从输入到输出的字符串长度相同。
这是我现在拥有的功能的代码。
String transform_username(String username)
{
// Get the length of the username
int username_length = username.length();
String first_letter = username.substring(0, 1);
String last_letter = username.substring(username_length - 1);
String new_string = "";
return new_string;
}
我能够得到第一个和最后一个字母,但我真的不知道如何将“*”放在单词的中间。我知道我可以循环使用它,但这显然不是一个好的解决方案。
答案 0 :(得分:9)
在一行正则表达式中,您可以这样做:
String str = "stackoverflow";
String repl = str.replaceAll("\\B\\w\\B", "*");
//=> s***********w
\B
是零宽度断言,匹配\b
不匹配的位置。这意味着它匹配除了第一个和最后一个字母之外的每个字母。
答案 1 :(得分:2)
char[] charArr = username.tocharArray();
for (int i=1;i<charArr.length - 1;i++) {
charArr[i] = 'x';
}
username = new String(charArr);
答案 2 :(得分:2)
答案 3 :(得分:1)
尝试
String ast = "*";
String new_string = first_letter + StringUtils.repeat(ast, username_length-2) + last_letter;
答案 4 :(得分:0)
获取两个字符串变量中的第一个和最后一个字母以及&#39; *&#39;在一个字符串var。并从1循环到长度为2并在变量中追加*。然后最后追加这三个。