1

次の内容のテキスト ファイルがあります。

public class MyC{
public void MyMethod()
{
    System.out.println("My method has been accessed");
    System.out.println("hi");
}
}

配列 num[]= {2,3,4} があります。この配列の文字列に完全に置き換えられる行番号が含まれています

String[] VALUES = new String[] {"AB","BC","CD"};

つまり、ライン 2 は AB に、ライン 3 は BD に、ライン 4 は CD に置き換えられます。

num[]配列にない行は、変更とともに新しいファイルに書き込む必要があります。

これまでのところ、いくつかの種類のループを試しましたが、まだ機能しません。

public class ReadFileandReplace {

/**
 * @param args
 */
public static void main(String[] args) {



    try {



         int num[] = {3,4,5};

         String[] VALUES = new String[] {"AB","BC","CD"};

         int l = num.length;

         FileInputStream fs= new FileInputStream("C:\\Users\\Antish\\Desktop\\Test_File.txt");
         BufferedReader br = new BufferedReader(new InputStreamReader(fs));

         LineNumberReader reader = new LineNumberReader(br);

         FileWriter writer1 = new FileWriter("C:\\Users\\Antish\\Desktop\\Test_File1.txt");

         String line;
         int count =0;

         line = br.readLine();
         count++;

         while(line!=null){
              System.out.println(count+": "+line);
              line = br.readLine();
              count++;

              int i=0;
                  if(count==num[i]){
                      int j=0;;
                    System.out.println(count);
                    String newtext = line.replace(line, VALUES[j]) + System.lineSeparator();
                    j++;
                                            writer1.write(newtext);
                  }
                  i++;
                  writer1.append(line);
              }


    writer1.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    } finally {
    }

}


}

予想される出力は次のようになります。

public class MyC{
AB
BC
    CD
    Sys.out.println("hi");
}
}

コードを実行すると、すべての行が同じ行に表示されます。

4

4 に答える 4

2

ほぼ完了しました。コードをマップで更新しました。これをチェックして

int num[] = {3, 4, 5};
String[] values = new String[]{"AB", "BC", "CD"};

HashMap<Integer,String> lineValueMap = new HashMap();
for(int i=0 ;i<num.length ; i++) {
    lineValueMap.put(num[i],values[i]);
}


FileInputStream fs = new FileInputStream("test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fs));

FileWriter writer1 = new FileWriter("test1.txt");

int count = 1;
String line = br.readLine();
while (line != null) {
    String replaceValue = lineValueMap.get(count);
    if(replaceValue != null) {
        writer1.write(replaceValue);
    } else {
        writer1.write(line);
    }
    writer1.write(System.getProperty("line.separator"));
    line = br.readLine();
    count++;
}
writer1.flush();
于 2013-01-08T10:51:10.993 に答える
2

各行を同じ文字列に追加しています。各行の終わりにも行区切り文字を追加する必要があります。(これは を使用して確実に行うことができますSystem.getProperty("line.separator"))

于 2013-01-08T10:33:38.580 に答える
0

終了行文字を追加していません。writer1.append(行); エンドライン文字なしでデータを行に追加しています。したがって、1行で表示されます。次のように変更する必要があるかもしれません: writer1.append(line).append("\n");

于 2013-01-08T10:33:12.173 に答える
0

これを試して

package src;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.TimeZone;

public class MainTest {


    static int i ;

    public static void main(String[] arg)
    {
        try {



             int num[] = {3,4,5};

             String[] VALUES = new String[] {"AB","BC","CD"};

             FileInputStream fs= new FileInputStream("C:\\Test\\ren.txt");
             BufferedReader br = new BufferedReader(new InputStreamReader(fs));

             FileWriter writer1 = new FileWriter("C:\\Test\\ren1.txt");

             String line;
             Integer count =0;

             line = br.readLine();
             count++;

             while(line!=null){


                 for(int index =0;index<num.length;index++){
                     if(count == num[index]){
                         line = VALUES[index];
                     }
                 }


                 writer1.write(line+System.getProperty("line.separator"));

                 line = br.readLine();

                 count++;


                 }


        writer1.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        } finally {
        }

}
}
于 2013-01-08T10:54:23.157 に答える