gpt4 book ai didi

Java .equals() 在字符串相等时返回 false

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:32 26 4
gpt4 key购买 nike

我正在制作一个应用程序,如果用户已经登录,我希望该应用程序从文本文件自动登录。目前,在文本文件中我有与数据库条目匹配的“alex|ppp”。先调用下面的方法

private void rememberedLogIn(){
String filename = "UserInfo.txt";
String info = "";
String user = "";
String pass = "";

try{
FileInputStream fIn = openFileInput(filename);
BufferedReader r = new BufferedReader(new InputStreamReader(fIn));
info = r.readLine();

}catch(IOException e){
e.printStackTrace(System.err);
}

for(int i =0; i < info.length();i++){
if(info.charAt(i) == '|' ){
user = info.substring(0,i);
pass = info.substring(i+1);
GlobalVar.loggedIn= true;
break;
}
}
new InitialStuff().execute(user,pass);
}

我已经仔细检查了 user 和 pass 的值,它们是预期的“alex”和“ppp”。接下来调用 InitialStuff,这是相关代码:

public class InitialStuff extends AsyncTask<String, Void, Toon>{
int prog = 0;
@Override
protected Toon doInBackground(String... params) {
android.os.Debug.waitForDebugger();
Toon toon = null;
Database db = new Database();
db.establishConnection();
if(db.tryLogIn(params[0], params[1])){
prog = 2;
publishProgress();
toon = db.getToonFromDB(params[0]);
prog = 4;
}else prog = 3;
publishProgress();
return toon;
}}

问题发生在我调用 db.tryLogin() 时,看起来像这样

public boolean tryLogIn(String toonName, String toonPass){
try{
while(!connected) establishConnection();
String sqlQuery = "SELECT Password FROM Toons WHERE Name LIKE '" + toonName+"';";
Statement stmt = con.createStatement();
ResultSet rSet = stmt.executeQuery(sqlQuery);
if(rSet.next()){
String dbPass = rSet.getString(1).trim();
if(dbPass.equals(toonPass)) //PROBLEM OCCURS HERE
return true;
}
}
catch(Exception e){ }
return false;
}

我已经检查过 dbPass 从数据库返回为与 toonPass 匹配的“ppp”,但它将跳过返回 true 并返回 false。

如果有帮助,这是 eclipse 给我的关于这两者的信息

toonPass "ppp"(id=830041185816) 数 3
哈希码 0
偏移量 5
值 (id=830041185744)
[0]一个
[1] l
[2] 电子
[3] x
[4] |
[5] p
[6] p
[7]p

dbPass "ppp"(id=830041708816) 数 3
哈希码 0
偏移量 0
值 (id=830041709136)
[0] p
[1] p
[2]

请注意,我还尝试将“ppp”传递给 tryLogin() 方法而不将其作为子字符串,以防与问题有关并且结果相同。

编辑:我解决了这个问题......有点。我刚刚停止使用 .equals() 方法,而是使用 for 循环比较每个字符串中的字符

最佳答案

一个提示!如果你正在玩 String 类方法,例如。 .compare() .equals() 等。记住字符集编码!尤其要确保与 IDE、项目文件、资源和数据库的编码相匹配(当您从外部源以字符串形式加载/读取数据时)

关于Java .equals() 在字符串相等时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com