嘿家伙,我试图找到一种隐藏字符串的方法,但我发现的代码只适用于我的应用程序......有没有办法隐藏字符串中的字符*
或者-
如果有人可以解释
问问题
42350 次
5 回答
10
这是用来做密码的吗?考虑以下:
class Password {
final String password; // the string to mask
Password(String password) { this.password = password; } // needs null protection
// allow this to be equal to any string
// reconsider this approach if adding it to a map or something?
public boolean equals(Object o) {
return password.equals(o);
}
// we don't need anything special that the string doesnt
public int hashCode() { return password.hashCode(); }
// send stars if anyone asks to see the string - consider sending just
// "******" instead of the length, that way you don't reveal the password's length
// which might be protected information
public String toString() {
StringBuilder sb = new StringBuilder();
for(int i = 0; < password.length(); i++)
sb.append("*");
return sb.toString();
}
}
或者对于刽子手方法
class Hangman {
final String word;
final BitSet revealed;
public Hangman(String word) {
this.word = word;
this.revealed = new BitSet(word.length());
reveal(' ');
reveal('-');
}
public void reveal(char c) {
for(int i = 0; i < word.length; i++) {
if(word.charAt(i) == c) revealed.set(i);
}
}
public boolean solve(String guess) {
return word.equals(guess);
}
public String toString() {
StringBuilder sb = new StringBuilder(word.length());
for(int i = 0; i < word.length; i++) {
char c = revealed.isSet(i) ? word.charAt(i) : "*";
}
return sb.toString();
}
}
于 2012-08-27T19:32:46.087 回答
5
只需创建一个与原始字符数相同的字符串,而是使用您的“混淆”字符。
String x = "ABCD";
String output = "";
for (int i = 0; i < x.length(); i++) {
output += "*";
}
或者,您可以使用x.replaceAll("\\S", "*")
,它也可以保留空格。
于 2012-08-27T19:37:22.963 回答
2
有几种方法可以实现这一点,这取决于您的应用程序。
如果您想一举用另一个字符掩盖所有字符,您可以使用以下String#replaceAll(String regex, String replacement)
方法:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java. lang.String,%20java.lang.String)。
这涉及使用正则表达式,因为regex
您将使用[\s\S]
它将匹配任何空白或非空白字符。因为replacement
您使用常规字符串,而不是 RegEx。在这种情况下,如果你想要一个星号,使用“*”,连字符“-”,非常简单。
除了@Roddy of the Frozen Pea
and@djc391
之外,这里的所有其他方法都运行良好,所以这就是我正确回答的原因。
祝你好运
于 2014-02-01T16:17:48.487 回答
1
你可以很容易地实现这样的事情:
public class MaskedString
{
private String data;
public MaskedString(String data){this.data = data;}
public void append(char c){data += c;}
public void setData(String data){this.data = data;}
public String getMasked()
{
StringBuilder sb = new StringBuilder();
for(int i=0; i<data.length(); i++)
sb.append('*');
return sb.toString();
}
public String getString()
{
return data;
}
}
你明白了:)
于 2012-08-27T19:49:45.900 回答
0
我的实现:
public static String maskString(String s, int x) {
int n = s.length()/x;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (n >= 1 && (i < n || i >= (s.length() - n))) {
sb.append(s.charAt(i));
}
else {
sb.append("*");
}
}
return sb.toString();
}
于 2020-03-12T02:47:10.287 回答