-1

プロジェクトを開始し、これは私をイライラさせます。コードは問題ないと思いますが、レコードを返す方法や行を解析する方法がわかりません。

Libra では次のように表示される CSV ファイルがあります。

USER PASSWORD Chris パスワード Michelle パスワード John パスワード

ユーザーにユーザーとパスワードを入力してもらい、それらを CSV と比較して、1) ユーザー名が存在し、2) 存在する場合はパスワードが正しいことを確認しようとしています。正直なところ、パート 2 は仕様の一部ではないため必須ではありませんが、やりたいと思っています。とにかく、私が抱えている問題と同じ問題になるのではないかと思います。私が言ったように、コードは大丈夫だと思いますが、変数 thisLine がどのような形式になるかわかりません.elseステートメントはBufferedReaderを次の行に正しく移動していますか?

thisLine.trim() を使用して USER PASSWORD を USER だけにカットできますか?

static void readFromCsvFile(String sFileName, User user) throws FileNotFoundException { String thisLine;

        try
        {
           BufferedReader reader = new BufferedReader(new FileReader(sFileName));
           thisLine = reader.readLine();
           System.out.print(thisLine);

           while((thisLine = reader.readLine()) != null)
               {
                    if (user.displayUserName() == thisLine)
                    {
                    System.out.print("\nUser <-" + user.displayUserName() + " -> exists!");
                    reader.close();
                    }

                    else 
                    {
                        thisLine = reader.readLine();
                    }
               }

        }
        catch(IOException e)
        {
            System.out.print("\nUser does not exist\n"); 
            e.printStackTrace();
        } 
4

2 に答える 2

2

ここでいくつかの意見:

1)コンテンツthisLine.trim()の最初と最後の末尾の空白を削除するだけです。thisLine特に2つの文字列を比較する場合は、そうしてもかまいませんが、変数からユーザー名とパスワードを分割することはありません。

2)2つの異なる値を分割するには、使用する必要がありますthisLine.split(" ")(CSVファイルでは、異なるフィールドを区切るために空白を使用していると想定しています)。

3)もう1つの間違いは、==ではなくを使用して文字列を比較するequalsことです。これは正しい方法です。

while4)あなたは内部を必要としない状態で新しい行を読んでいるのでreader.readLine()

5)最後に、ループ内のストリーム(またはリーダー)を絶対に閉じないでください!! ブロックでそれを行いtry/catch/finallyます。

したがって、これらの修正を行うと、コードは次のようになります。

 static void readFromCsvFile(String sFileName, User user) throws FileNotFoundException { 
   String thisLine;
   BufferedReader reader = new BufferedReader(new FileReader(sFileName));
    try
    {

       thisLine = reader.readLine();
       System.out.print(thisLine);

       while((thisLine = reader.readLine()) != null)               
           {
               thisLine = thisLine.trim();
               String username = thisLine.split(" ")[0];
                if (user.displayUserName().equals(username))
                {
                System.out.print("\nUser <-" + user.displayUserName() + " -> exists!");
                break;   // break the loop
                }                    
           }

    }
    catch(IOException e)
    {
        System.out.print("\nUser does not exist\n"); 
        e.printStackTrace();
    } 
    finally {
        try {
            reader.close();
        } catch (IOException e) { /* ignore */ }
    }
}
于 2012-10-05T13:17:43.277 に答える
1

2 つの文字列を比較するには:

firstString.equal(secondString);

もう 1 つの問題はthisLine、ユーザー名とパスワード (たとえば「Chris Password」) が含まれていることです。そのため、行を分割してユーザー名 (「Chris」) とパスワード (「Password」) を分離する必要があります。

while((thisLine = reader.readLine()) != null)
{
    thisLine = thisLine.trim()
    // userData[0] => Username and userData[1] => Password
    String userData[] = thisLine.split(" ");
    if (user.displayUserName().equal(userData[0]))
    {
        System.out.print("\nUser <-" + user.displayUserName() + " -> exists!");
    }
}
于 2012-10-05T13:07:49.650 に答える