1

テスト用に、テキスト ファイルに 3 つの名前を入れました。

Joe       ,Smith
Jim       ,Jones
Bob       ,Johnson

s=reader.readLine();ループの最後に1 秒を追加して永久ループを修正しましたwhileが、以下のコードを実行すると、次の出力が得られます。

JoeSmith
JoeSmith
JimJones
JimJones
BobJohnson
BobJohnson

名前の重複を防ぐにはどうすればよいですか? 私の秒s=reader.readLine();は間違って配置されていますか? *がらくた。どうでも。ソースデータとそれから作成された配列フィールドを出力しています。おい。

import java.nio.file.*;
import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;
import static java.nio.file.StandardOpenOption.*;
import java.util.Scanner;
import java.text.*;
import javax.swing.JOptionPane;
//
public class VPass
{
    public static void main(String[] args)
    {
        final String FIRST_FORMAT = "          ";
        final String LAST_FORMAT = "          ";
        String delimiter = ",";
        String s = FIRST_FORMAT + delimiter + LAST_FORMAT ;
        String[] array = new String[2];
        Scanner kb = new Scanner(System.in);
        Path file = Paths.get("NameLIst.txt");
        try
        {    
            InputStream iStream=new BufferedInputStream(Files.newInputStream(file));
            BufferedReader reader=new BufferedReader(new InputStreamReader(iStream));
            s=reader.readLine();
            while(s != null)
            {
                array = s.split(delimiter);
                String firstName = array[0];
                String lastName = array[1];
                System.out.println(array[0]+array[1]+"\n"+firstName+lastName);
                s=reader.readLine();
            }
    }
    catch(Exception e)
    {
        System.out.println("Message: " + e);
    }
   }
  }
4

2 に答える 2

2

s=reader.readLine();while ループの最後にもう一度入れます。最終的には null になり、ループは終了します。

于 2012-04-27T01:42:55.370 に答える
2

s最初のループ反復後に更新することはありません。

コードは次の行に沿ったものにする必要があります。

while ((s = reader.readLine()) != null)
{
  array = s.split(delimiter);
  String firstName = array[0].trim();
  String lastName = array[1].trim();
  System.out.println(array[0]+array[1]+"\n"+userName+password);
}

編集:trim()Sanchitのコメントに従って提案を追加しました。


質問が変更された後のその後の編集:

2 番目の s=reader.readLine(); を追加して、永遠のループを修正しました。while ループの最後にあるのですが、以下のコードを実行すると、次の出力が得られます。

ジョー・スミス

ジョー・スミス

ジム・ジョーンズ

ジム・ジョーンズ

ボブ・ジョンソン

ボブ・ジョンソン

あなたのコードを見ると:

while(s != null)
{
  array = s.split(delimiter);
  String firstName = array[0];
  String lastName = array[1];
  System.out.println(array[0]+array[1]+"\n"+firstName+lastName);   // <-- this prints 2 lines of output
  s=reader.readLine();
}

...ループの繰り返しごとに2行の出力が出力されていることがわかります。

于 2012-04-27T01:42:58.007 に答える