0

私が達成しようとしているのは、2 つのファイルを読み取り、各ファイルの文字列の順序をランダム化し、それらを新しい空のファイルに追加することです。ファイルを読み込んでランダム化することはできますが、2 つのファイルを結合すると、次のような文字列の後に不要な出力が表示されます。

(明らかに、私が望まない部分はjava.io.FileReader@d80ba6ff部分であり、@ の後の文字は常にランダムです)

私も各ファイルの1行だけを読んでいるようです

ファイルを結合する主な方法は次のとおりです

ReadFiles obj = new ReadFiles();
    obj.loadCompanies();
    obj.loadTitles();

    FileReader fCompany=new FileReader("F:\\company2.txt");
    FileReader fTitle=new FileReader("F:\\title2.txt");
    BufferedReader br1 = new BufferedReader(fCompany);
    BufferedReader br2 = new BufferedReader(fTitle);

    String tempCompany = null, tempTitle = null;

    while(br1.readLine() != null)
    {
    tempCompany = br1.readLine()+ fCompany;
    }
    while(br2.readLine()!=null)
    {
    tempTitle = br2.readLine() + fTitle;
    }
    String tempFile = tempCompany + ", " + tempTitle;

    FileWriter fw = new FileWriter("F:\\companyTitleCombined.txt");
    char buffer[] = new char[tempFile.length()];
    tempFile.getChars(0,tempFile.length(),buffer,0);
    fw.write(buffer);
    fCompany.close();
    fTitle.close();
    fw.close();

また、私のランダム化されたファイル方法の1つ

public void loadCompanies(){

String[] strArr = new String[10];
int i = 0;

Scanner readInformation = null;

    try {       
        readInformation = new Scanner(new File("F:\\company.txt"));  
        PrintStream out = new PrintStream(new FileOutputStream("F:\\company2.txt"));
        System.setOut(out);
    } catch (Exception e) {
        System.out.println("Could not locate the data file!");
    }

    while(readInformation.hasNext()) {
        strArr[i] = readInformation.next();
        int rand = (int) Math.floor(strArr.length * Math.random());


        System.out.println(strArr[rand]);
        i++;
    }
    readInformation.close();
}

これらの不要な出力を取り除くためにあなたが私に与えることができるどんな助けも大歓迎です!

お時間をいただきありがとうございます。

出力例:

ファイル 1: name1 name2 name3

ファイル 2: company1 company2 company3

ランダム化された File1 + File2 = File3 の組み合わせ:

名前3、会社2

名前1、会社1

名前2、会社3

4

1 に答える 1

1

すべての行を読み取りますが、最後の行のみを変数に保存します。フォームの代入ごとにtempCompany = br1.readLine()+ fCompany;、 の以前の値が破棄されますtempCompany。また、その+ fCompany部分は意味がありません。(つまり、「java.io.FileReader@d80ba6ff」)の文字列表現を行に追加しFileReader、投稿によってそれを望まない; あなたはそれを取り除くべきです。

すべての行に対して何らかの操作を実行したいので、それらをリストに保存する必要があります。String tempCompany = null, tempTitle = null;追加前

List<String> companies = new ArrayList<String>();
List<String> titles = new ArrayList<String>();

ループを次のように変更します。

tempCompany = br1.readLine();
while(tempCompany != null)
{
    companies.add(tempCompany);
    tempCompany = br1.readLine();
}

tempTitle = br2.readLine();
while(tempTitle != null)
{
    titles.add(tempTitle);
    tempTitle = br1.readLine();
}

次に、両方のリストをシャッフルする必要があります。

Collections.shuffle(companies);
Collections.shuffle(titles);

目的の出力を得るには、リストの長さが同じであることを確認する必要があります。また、入力ファイルは改行ではなくスペースで分割されているように見えるため、readLine必要なものが提供されない場合があります。その場合は、split-method fromを使用するか、 のStringようなものに移動する必要がありStreamTokenizerます。

その後、出力ファイルを書き込むことができます。2 つのリストから同じインデックスの文字列を連結するだけです。

于 2013-09-27T15:26:48.863 に答える