0

現在、テキスト ファイルから行内のいくつかの文字列を置き換えています。ファイルの内容は次のとおりです。

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

私のコードは次のとおりです。プログラムは、配列で定義された特定の行から文字列を置き換えるだけです。元のインデントをそのままにしておく必要があります。

public class ReadFileandReplace {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
        boolean l1;
        int num[] = {1, 2, 3};
        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("C:\\Users\\Antish\\Desktop\\Test_File.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));

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

        int count = 1;
        String line = br.readLine();
        while (line != null) {

             l1 = line.contains("\t");
             System.out.println(l1);
            String replaceValue = lineValueMap.get(count);
            if(replaceValue != null) {
                if(l1==true){
                writer1.write("\t"+replaceValue);}
                 writer1.write(replaceValue);
            } else {
                writer1.write(line);
            }
            writer1.write(System.getProperty("line.separator"));
            line = br.readLine();
            count++;
        }
        writer1.flush();
    }
}

私はこの出力を得る:

出力

CDCD のインデントが失われ、元のテキスト ファイルの元の位置から開始する必要があります。

誰かがこれを修正する方法を教えてくれますか? コード内の 1 つのタブスペース チェックは正常に機能しますが、2 つ以上のタブスペースをチェックする方法。

4

1 に答える 1

1

println() ステートメントを文字列から char[] 配列に変換し、ループ内で現在の文字がエスケープ文字 '\t' (タブ) であるかどうかを確認します。

「S」までのすべての文字が...

System.out.println("My method has been accessed"); 

...タブである場合、変数に格納されている値はタブの数と等しくなり、その後、それらのタブの数を適用します。「Test_File」を書いたとき、タブを押す代わりにスペースを押したので、そこにいくつのタブがあるかを特定できないことに注意してください。

このコードを自分のコードと比較して、Java の規則に従ってください。

コード:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
 *
 * @author Deathstar
 */
public class MyC
{ 

public static void main(String[] args)
{

  BufferedReader br = null;

  boolean isLineMatched = false;
  int c1 = 0, lineNumArrLength, lineCount = 0;
  int lineNums[] = {1,2};
  char[] toCharArr;
  String sCurrentLine, oldText, addSpaces = "";
  String[] valuesToOverwrite = new String[] {"AB","BC","CD"};

    try 
    {

      lineNumArrLength = lineNums.length;

      br = new BufferedReader(new FileReader("C:\\Users\\jtech\\Documents\\NetBeansProjects\\HelpOthers\\src\\textFiles\\Test_File.txt"));

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

      for (int i = 0;i < (valuesToOverwrite.length -1) ;i++ ) //Loop 3 Times
      { 
          writer1.append(valuesToOverwrite[i]+System.lineSeparator()+System.lineSeparator());
      }

      while ((sCurrentLine = br.readLine()) != null )
      {
          oldText = sCurrentLine; 
          lineCount++;        
          isLineMatched = false;      
          toCharArr = sCurrentLine.toCharArray();

          while (c1 < lineNumArrLength) 
          {
              if (lineCount == lineNums[c1])   
              {
                for (int c2 = 0; c2 < toCharArr.length; c2++)
                {
                    if (toCharArr[c2] == ' ')
                    {
                        addSpaces += " ";
                    }
                }
                      String newText = sCurrentLine.replace(oldText, addSpaces+valuesToOverwrite[lineCount]);
                      writer1.append(newText+System.lineSeparator());
                      isLineMatched = true;
                      addSpaces = "";
              } 
              c1++; 

          }

          if (isLineMatched == false)
          {
            writer1.append(oldText+System.lineSeparator());
          }

          c1 = 0;
      }




      writer1.close();


    } 
    catch (IOException e) 
    {
      e.printStackTrace();
    } 
    finally 
    {
      try 
      {
        if (br != null)
        {
              br.close();
        }
      } 
      catch (IOException ex) 
      {
        ex.printStackTrace();
      }
    }    
  }        

}
于 2013-01-08T19:34:06.940 に答える