java - 字符串内容未在与字符串声明相同的方法中被替换。(JDA)
问题描述
我正在尝试将随机生成的字符串存储在字符串变量中以用于其他事情。基本上,它是一个密码生成器,用于存储密码以供需要它的命令使用。该应用程序似乎在存储密码以供以后使用时存在问题。代码和输出与预期如下。
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
super.onGuildMessageReceived(event);
String id = "discord userid String";
long idlong = Long.parseLong(id);
String generatedString = RandomStringUtils.random(15, true, true);
StringBuilder stored = new StringBuilder(15);
//password generator
if (event.getMessage().getContentRaw().equalsIgnoreCase("!passwordgen")) {
if (stored.toString().isEmpty() == true || idlong ==
event.getMessage().getAuthor().getIdLong()) {
stored.replace(0, 14, generatedString);
User user = event.getMessage().getAuthor();
user.openPrivateChannel().complete()
.sendMessage("Your new password is: " + stored + ". You can change your password
in the future with !setpassword <currentpassword>.").queue();
}
else {
event.getChannel().sendMessage("You do not have permission to generate a new password
and/or an initial password has already been set.").queue();
}
}
//set password command
if (event.getMessage().getContentRaw().startsWith("!setpassword")) {
char[] chararr = event.getMessage().getContentRaw().toCharArray();
for (int i = 0; i < chararr.length; i++) {
if (chararr[i] == ' ') {
passwordkeyed += event.getMessage().getContentRaw().substring(13);
}
}
if (passwordkeyed.equals(stored.toString()) && !(passwordkeyed.isEmpty())) {
stored.replace(0, 14, generatedString); //replaces random password from !passwordgen
// with new random password
event.getChannel().sendMessage("Stored: " + stored).queue();
event.getChannel().sendMessage("Check your DMs!").queue();
User user1 = event.getMessage().getAuthor();
user1.openPrivateChannel().complete()
.sendMessage("Your new password is: " + stored).queue();
}
if (!(passwordkeyed.equals(stored.toString()))) {
event.getChannel().sendMessage("Incorrect password. Stored: " + stored).queue();
}
if (stored.toString().isEmpty()) {
event.getChannel().sendMessage("Please use !passwordgen to generate an initial password.").queue();
}
}
}
出于某种原因,在该//password generator
部分中,stored
用随机字符串替换就好了,但是当您使用!setpassword
命令输入该密码时,stored
它是空的,所以就像replace
我在密码生成器部分中使用的方法没有被保存,即使StringBuilder
有该方法的适当范围。我一直在尝试这样做一段时间。我尝试过使用 String、StringBuilder 和 StringBuffer 来查看是否有不同的结果但都具有相同的输出。
输出:
!passwordgen //discord bot command
Your new password is: h50uSKlrWa30Q40. You can change your password in the future with !setpassword
<currentpassword>. //private message to whoever ran the command
!setpassword h50uSKlrWa30Q40 //discord bot command
Incorrect password. Stored:
Please use !passwordgen to generate an initial password.
预期输出:
!passwordgen //discord bot command
Your new password is: h50uSKlrWa30Q40. You can change your password in the future with !setpassword
<currentpassword>. //private message to whoever ran the command
!setpassword h50uSKlrWa30Q40 //discord bot command
Stored: 2Fx8buVxpIEyNYX
Check your DMs!
Your new password is: 2Fx8buVxpIEyNYX //private message to whoever ran the command
在我的脑海里,我在想这可能是我生成随机密码并存储它的方式,但我不确定,因为这似乎是字符串声明本身及其范围的问题
解决方案
尝试:
StringBuilder stored = new StringBuilder(15);
至
String stored = "";
或者
尝试将其添加到public void onGuildMessageReceived(GuildMessageReceivedEvent event)
:
private String Stored = "";
每次你想使用它,做this.Stored
看看它是否有效。
另外,尝试添加一条语句以在代码中的随机点以 dms 发送当前存储的字符串,这就是我所说的打印调试,以简单地查看值何时更改以减少我们的搜索。
推荐阅读
- html - 无法将 css 应用于两个不同的表
- angular - Angular 构建产品与 isDevMode() 错误
- css - 如何在 django 中使用 css @media?
- python - Arduino 串行监视器上的“发送”按钮在做什么?
- c++ - 为什么在 C++ 中获取日期和/或时间如此复杂?
- c - 如何测量 Windows 上的 CPU 缓存未命中?(AMD 锐龙 7)
- python - 基于少数条件的利率
- json - 使用 for 循环、Express.js 创建 JSON
- firebase - 如何确定它是来自 Firebase 的无密码身份验证中的注册还是登录?
- mysql - 在 MySQL 中选择特定的列名,如 disc%