java - 无法生成固定大小的字母数字符号字符串
问题描述
如果用户没有自己的密码想法,我正在构建一个应用程序,该应用程序会为用户建议一个强密码。这个想法是用户选择密码的大小(4个单选按钮),密码特征(4个复选框)和点击生成。基于此选择,我正在尝试生成一个随机字符串:
private String generatedPassword(){
int length = 0;
StringBuilder generatedString = new StringBuilder();
Random rand = new Random();
if(radio4.isSelected()){length = 4;}
else if(radio8.isSelected()){length = 8;}
else if(radio12.isSelected()){length = 12;}
else if(radio16.isSelected()){length = 16;}
if(passwordABCD.isSelected()){totalCharacters += capitalLetters;}
if(passwordabcd.isSelected()){totalCharacters += lowercaseLetters;}
if(password0123.isSelected()){totalCharacters += numbers;}
if(passwordSymbols.isSelected()){totalCharacters += characters;}
char[] text = new char[length];
for(int i = 0; i < length; i++){text[i] = totalCharacters.charAt(rand.nextInt(length));}
for (char c : text) { generatedString.append(c); }
return generatedString.toString();
}
并在用户单击“生成”时设置此字符串的 EditText
GenerateDialog(@NonNull Context context) {
super(context, android.R.style.Theme_NoTitleBar_Fullscreen);
setContentView(R.layout.dialog_layout);
...
generatePassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
passwordEditText.setText(generatedPassword());
}
});
...
}
但不幸的是,在“passwordEditText
编辑文本”字段中什么都看不到。
解决方案
尝试isChecked()
在按钮上使用方法而不是isSelected()
.
此外,您可能希望通过删除不必要的char[]
数组来简化代码,而是执行以下操作:
for (int i = 0; i < length; i++) {
generatedString.append(totalCharacters.charAt(rand.nextInt(totalCharacters.length()));
}
推荐阅读
- c# - 从存储库中提取时,Visual Studio 2017 丢失了 WPF 的引用
- express - 摩根与 Express 不记录静态文件
- c# - 限界上下文的物化是什么?(C#/.NET)
- c# - 参数对sql命令不生效
- json - 如何反序列化具有重复键的 JSON 而不会丢失任何值?
- python - 多元时间序列的正确 LSTM 输入形状是什么?
- android - Jetpack Navigation:在 Fragment 之间导航时,如何使用与启动新 Activity 时相同的动画?
- python - 如何为多对多查询返回完全匹配
- c++ - 在 C++17 中以函数方式进行笛卡尔积
- javascript - React 部署到 gh-pages 时不显示放置在公用文件夹中的图像,但在本地主机上工作,为什么?