2011-01-27 17 views
1

私は、名前とパスワードを次のように区切ったテキストファイルを持っています。テキストファイルの読み込みに問題があります

ログインページで、ユーザーが正しいユーザー名とパスワードを入力すると、ウェルカムページに移動します。しかし、私はこれを正しく取得していません。私が得る出力は

user1 
pwd1 
inside try 
user1 
pwd1 
true 
welcome user1 
user2 
pwd2 
false 
not equal 

私のコードは以下の通りです。

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileReader; 
import java.io.InputStreamReader; 
import java.util.regex.*; 
import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern; 


public class TextFile { 

    /** 
    * @param args 
    */ 

    public void getNamePwd(String name, String pwd) { 
     // TODO Auto-generated method stub 
     System.out.println(name); 
     System.out.println(pwd); 
     String[] splitVals=null; 
     try{ 
      System.out.println("inside try"); 
      String strLine; 
      BufferedReader br = new BufferedReader(new FileReader("D:\\test\\text.txt")); 
      while((strLine=br.readLine())!=null){ 
      splitVals=strLine.split(":"); 
      for(int i=0;i<splitVals.length;i=i+2){ 
      System.out.println(splitVals[i].toString()); 
      System.out.println(splitVals[i].toString()); 
      String nameUser=splitVals[i].toString(); 
      String passWord=splitVals[i+1].toString(); 
      System.out.println(name.equals(nameUser)); 
      if((name.equals(nameUser))&&(pwd.equals(passWord))){ 
       System.out.println("welcome"+name); 
       } 
      else{ 
       System.out.println("not equal"); 
      } 
      } 
      } 
     }catch(Exception e){ 

     } 
    } 

} 

あなたは試合時にループを切断する必要がこれを行うには...私はあなたが1を見つけた後、ユーザー名/パスワードが一致を探して停止することを疑う...

答えて

0

私を助けてください。これを行うには、次の操作を行います。あなたはこのループを必要とする理由


readLoop: 
while((strLine=br.readLine())!=null){ 

    // ... 
    String[] splitVals = strLine.split(":"); 

    if((name.equals(nameUser))&&(pwd.equals(passWord))){ 
     System.out.println("welcome"+name); 
     break readLoop; 
    } 

    // ... 
} 
はまた、私にはわからない:あなたが行でファイル 行を読ん

for(int i=0;i<splitVals.length;i=i+2) 

リコール。つまり、分割された配列には、現在の行のユーザー名とパスワードが格納されます。私はおそらくScannerを使用して、それを解決するだろう

System.out.printf("Username: %s, Password: %s%n", splitVals[0], splitVals[1]); 

:あなたはこのような何かを行うことができ、ユーザ名/パスワードを印刷するには

。このような何か:

import java.io.*; 
import java.util.Scanner; 


public class TextFile { 

    public static void main(String[] args) throws FileNotFoundException { 

     if (userPassOk("hello", "world")) 
      System.out.println("Welcome"); 
     else 
      System.out.println("Get out!"); 
    } 

    private static boolean userPassOk(String user, String pass) 
      throws FileNotFoundException { 

     Scanner s = new Scanner(new File("test.txt")); 
     while (s.hasNextLine()) { 
      String[] userPass = s.nextLine().split(":"); 
      if (userPass[0].equals(user) && userPass[1].equals(pass)) 
       return true; 
     } 
     return false; 
    } 
} 
0

は(試みの終わりにnameUserの値とパスワードをリセットしてください)

として

nameUser=""; passWord="";

0

あなたのprint文が間違っています。だからあなたはこれを正しくデバッグすることができません。

印刷しているものが、名前とパスワードに使用しているものと一致しません。これを修正し、もう一度印刷してみてください。

for(int i=0;i<splitVals.length;i=i+2){ 
    System.out.println(splitVals[i].toString()); 
    System.out.println(splitVals[i].toString()); 
    String nameUser=splitVals[i].toString(); 
    String passWord=splitVals[i+1].toString(); 

ただし、このループは必要ありません。あなただけ使用することができます:あなたの条件がsatisfied.Don't許可されている

 String nameUser=splitVals[0]; 
     String passWord=splitVals[1]; 
0

プット・ブレーク場合loop.Ifあなたはhere.youがあなたの期待出力を得たBRAKを入れ続けます。

if((name.equals(nameUser))&&(pwd.equals(passWord))){ 
       System.out.println("welcome"+name); 
        break; 
       } 
+0

実際に一致する「while」ループではなく、 'for'ループが破損することに注意してください。 (私の答えを見てください。) – aioobe

関連する問題