Java找不到字符串

时间:2018-04-17 21:28:53

标签: java regex

我很难理解为什么这不起作用。这只是代码中无法正常工作的部分。

用户名和密码作为参数传递给方法。我已经运行了测试打印语句,以确保传递的值是正确的,以及正确分配文件的下一行

fileByteStream = new FileInputStream("credentials.txt");  
inFS = new Scanner(fileByteStream);        


while (inFS.hasNextLine()){                          // If the file has another line
String nextLine = inFS.nextLine();                   // Assign that line to a String

if (nextLine.contains(username)) {                   // Check line for username             
    System.out.println("USERNAME FOUND!");                    

        if (nextLine.contains(password)) {           // Verify password
            System.out.println("PASSWORD FOUND!");

这是我的困境。 nextLine.contains(用户名)无法正常工作。它匹配行内任何位置的实例。

我尝试过使用(" \\ b" +用户名+" \\ b")但是,它似乎没有在行中找到用户名而我无法弄清楚原因。

如果用户名匹配,找到密码似乎工作正常。

文本文件中的行格式如下:

user.name MD5hashOfPassword "密码" 作业

3 个答案:

答案 0 :(得分:0)

您需要为每一行进行某种预处理。提取您要匹配的部分,以便进行精确检查。

请注意,我在此示例中使用了String#split,因为它与您提供的示例数据一起使用,但我不知道该行的实际语法。

String nextLine = inFS.nextLine();
String[] parts = nextLine.split("\\w+"); // '+' allows multiple spaces
String usernameFromLine = parts[0];
String passwordFromLine = parts[2];

if(usernameFromLine.equals(username)) {
    ....

请注意,此示例不检查边界,也不关心语法错误的行。它会崩溃。

答案 1 :(得分:0)

您已经在使用Scanner,它会进行字符串标记化,但不会真正使用它的强大功能。您可以使用next()读取令牌,而不是阅读整行然后自己完成工作。如果

    while (inFS.hasNextLine()) {                      
        /* Get the username */
        String nextUsername = inFS.next();

        // Is this the username you're looking for?
        if (nextUsername.contains(username)) {
            System.out.println("USERNAME FOUND!");

            /* Consume the next token, even if you're not going to
                do anything with it */
            String nextMD5 = inFS.next();

            // Next token should be the password
            String nextPassword = inFS.next();
            if (nextPassword.contains(password)) {
                System.out.println("PASSWORD FOUND!");
            }
        }

        // ensure you advance to the next line before starting again
        inFS.nextLine();
    }

答案 2 :(得分:0)

感谢大家的帮助。这最终最终为我工作。

#home{
    /* The image used */
background:  url('{{ STATIC_URL }}/store/img/store.jpg') no-repeat;

/* Full height */
height: 100%;

/* Create the parallax scrolling effect */
background-attachment: fixed;
background-position: center;
background-size: cover;

再次感谢您的帮助。非常感谢您的反馈。