0

我正在开发一个 Java 命令行应用程序,当用户输入密码时,我需要显示一个星号 (*) 或任何类似符号。我曾尝试使用 replace() 方法,但它只接受一个字符。有没有办法将所有字母和数字作为此替换方法的参数传递。否则屏蔽用户输入的方法是什么。

我不能在这里使用 console.readPassword 技术,因为我需要 String 数据类型的密码(由用户指定)。

4

5 回答 5

4

实际上,您不能使用替换方法。通过使用它,用户输入仍然可见,并且您只是更改存储到内存中的值。

如果您需要将密码作为字符串(出于安全原因不建议这样做,但无论如何......):

char[] pwd = console.readPassword();
String str = new String(pwd);
于 2010-09-22T07:17:14.363 回答
2

只需将 char 数组转换为字符串。Console.readPassword 完全适合您的用例(读取密码:D)。

最初,它是 char[] 而不是 String,因为您可以将数组的内容设为空,并且您的密码消失了,而 String 可能会被汇集并留在您的内存中。

于 2010-09-22T07:16:31.227 回答
1

这里有一个示例: Java 编程语言中的密码屏蔽[java.sun.com]

于 2010-09-22T07:20:16.980 回答
0

只需使用console.readPassword(),然后Stringchar[]

String passWord = new String(chars);
于 2010-09-22T07:18:37.277 回答
0

Since you want to output asterisks, you cannot use console.readPassword. Instead, you have to do it on your own: disable the echoing, switch the input to unbuffered (char-wise instead of line-wise) mode, read the password char by char, print an asterisk for each char you read. I propose you look for a curses-like library for java (there are several around, see What's a good Java, curses-like, library for terminal applications?, for this task.

于 2010-09-22T07:26:41.310 回答