繁体   English   中英

检查文本文件中是否存在字符串

[英]Check if string exists in text file

我正在尝试编写一个方法,该方法检查给定的字符串是否存在于 a.txt 文件中,但似乎我的 if/else 语句无法正常工作。

public void ChcekIfPasswordExsists(String check) throws FileNotFoundException{
    BufferedReader reader = new BufferedReader(new FileReader("Passwords.txt"));
    Scanner fileScanner = new Scanner(reader);
    while(fileScanner.hasNextLine()){
        final String line = fileScanner.next();
        if(line.contains(check)){
            System.out.println("Password for " + check + " already exsits");
            break;
        }
        else{
            System.out.println(check + " is usable");
            break;
        }        
    }
}

这是我调用该方法的地方:

System.out.println("Enter the name of the app or website,\nwhere password is going to be use:");
useCase = s.nextLine();
 ChcekIfPasswordExsists(useCase);

我看了无数其他的帖子,没有任何效果。 无论如何,似乎代码跳过了“if”语句,直接跳转到了“else”语句。

while循环的逻辑应该是遍历文件中的所有行,直到找到匹配项或到达文件末尾。 考虑这个版本:

public void ChcekIfPasswordExsists(String check) throws FileNotFoundException {
    BufferedReader reader = new BufferedReader(new FileReader("Passwords.txt"));
    Scanner fileScanner = new Scanner(reader);
    boolean flag = false;
    while (fileScanner.hasNextLine()) {
        final String line = fileScanner.next();
        if (line.contains(check)) {
            flag = true;
            break;
        }
    }

    if (flag) {
        System.out.println("Password for " + check + " already exsits");
    }
    else {
        System.out.println(check + " is usable");
    }
}

此外,我可能倾向于更改方法签名以返回 boolean 值(真/假)。 根据该返回值,您可以向控制台显示您想要的消息。

旁注:如果您实际上将明文密码存储在文本文件中,请立即停止这样做。 这是一个安全漏洞。 相反,设置一个适当的数据库,只存储一个不可逆的 hash 密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM