我正在开发一个Java命令行应用程序,当用户输入密码时,我需要显示一个星号(*)或任何类似的符号。我尝试使用replace()方法,但它只接受一个字符。有没有办法将所有字母和数字作为此替换方法的参数传递。或者屏蔽suer输入的方法是什么。
我不能在这里使用console.readPassword技术,因为我需要String数据类型中的密码(用户tpyed)。
答案 0 :(得分:4)
实际上,您无法使用替换方法。通过使用它,用户输入仍然可见,并且您只是更改存储在内存中的值。
如果您需要密码作为字符串(出于安全原因不建议使用,但无论如何......):
char[] pwd = console.readPassword();
String str = new String(pwd);
答案 1 :(得分:2)
只需将char数组转换为字符串即可。 Console.readPassword完全针对您的用例(读取pwd:D)。
最初,它是char []而不是String,因为你可以使数组的内容为空,并且你的密码消失了,而String可能会被合并并留在你的记忆中。
答案 2 :(得分:1)
这里有一个例子: Password Masking in the Java Programming Language [java.sun.com]
答案 3 :(得分:0)
只需使用console.readPassword()
,然后从String
创建char[]
:
String passWord = new String(chars);
答案 4 :(得分:0)
由于您要输出星号,因此无法使用console.readPassword。相反,您必须自己完成:禁用回显,将输入切换为无缓冲(char-wise而不是line-wise)模式,通过char读取密码char,为您读取的每个char打印星号。我建议你为这个任务找一个类似curses的java库(有几个,见What's a good Java, curses-like, library for terminal applications?)。