2014-01-13 62 views
1

我正在試圖創建一個JFrame來檢查放置在JTextField中的文本是否與.txt文件中的信息相同。 然後如果這是正確的,它會檢查JPasswordField中的信息是否與.txt文件中的信息匹配。爲什麼我的字符串檢查代碼不工作

public void actionPerformed(ActionEvent e) 
{ 
    if(e.getSource() == button) 
    { 
     if(!username.getText().equals("") && passIsGood()) 
     { 
      try 
      { 
       Scanner reader = new Scanner(new File("users.txt")); 
       reader.useDelimiter("\t|\n"); 
       reader.nextLine(); 
       while(reader.hasNextLine()) 
       { 
        if(reader.next().equals(username.getText())) 
        { 
         //Username is correct, now checks for password: 
         System.out.println("Username passed");  
         if(reader.next().equals(passToString())) 
         { 
          //Username & Password are correct 
          System.out.println("Password passed"); 
          break; 
         } 
        } else if(!reader.hasNextLine()) 
        { 
         wrongInfo(); 
        } else 
        { 
         reader.nextLine(); 
        } 
       } 
       reader.close(); 
       frame.dispose(); 
      } catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, ex); 
      } 
     } else 
     { 
      JOptionPane.showMessageDialog(null, "Please enter a valid Username and Password"); 
     } 
    } 
} 

private static String passToString() 
{ 
    String passString = new String(password.getPassword()); 
    return passString; 
} 

我得到儘可能的用戶名路過,但我覺得像.equals(passToString())可能是造成問題的原因。 文本文件看起來像這樣: 用戶名密碼 測試thetest test2的thetest3

注意,在每個字段之間的空間是使用標籤,因此我的分隔符(「\ t | \ n」);

+0

users.txt中的每個第二個字段後是一個新行 – Otanan

+0

爲什麼你需要在頂部調用reader.nextLine()? – sasankad

+0

@sasankad我的.txt文件的第一行是用於格式化的,它說「用戶名密碼」作爲第一行來表示如何寫出其餘的內容,我想忽略它 – Otanan

回答

1

包含在您的文本字段中的字符串可能包含一些不需要的字符。使用字符域(所有ascii值是一個符號)來擺脫這些。試試這個:

import java.io.File; 
import java.util.Scanner; 

public class readUsers { 

    public static void main(String[] args) { 
     try { 
      Scanner reader = new Scanner(new File("users.txt")); 
      reader.useDelimiter("\t|\n"); 

      String username = "username"; 
      String password = "password"; 

      for (int i = 0; i < username.length(); i++) { 
       //replace possible unwanted characters 
       if (username.charAt(i) < 33 || username.charAt(i) > 126) 
        username = username.replace(Character.toString(username.charAt(i)), ""); 
      } 

      for (int j = 0; j < password.length(); j++) { 
       //replace possible unwanted characters 
       if (password.charAt(j) < 33 || password.charAt(j) > 126) 
        password = password.replace(Character.toString(password.charAt(j)), ""); 
      } 

      while (reader.hasNextLine()) { 
       String user = reader.next(); 
       String pass = reader.next(); 

       //if username equals the user in the textfile, check if password equals the pass in the file 
       if (user.equals(username)) { 
        System.out.println("username passed!"); 
        if (pass.equals(password)) 
         System.out.println("password passed!"); 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我的文本文件看起來是這樣的:
用戶名密碼
USERNAME2密碼

附:這是我的第一個StackOverFlow有史以來的答案,糾正我,如果我做錯了什麼:)

+0

謝謝你的迴應!儘管如此,我發現了一個相當簡單的解決方案,事實證明我的問題是用戶名中包含一個看似不明顯的\ n,因此我簡單地使用了String.trim();方法來解決它,謝謝不管! – Otanan

+1

雖然我不知道哪個字符導致了問題;) – pietv8x

相關問題