簡體   English   中英

Java:根據列表的內容編輯文本文件

[英]Java: Editing a Text File based on the contents of a List

這應該是一個非常直接的問題。 我有一個足夠大的文本文件,其中的數據看起來像這樣

B38564108,EURONAV NV SHS,
B38564908,EURONAV NV CALL,
B38564958,EURONAV NV PUT,
B6S7WD106,NYXOAH S A SHS,

該文件中大約有 25,000 行。 我還有一個 ArrayList(在下面的代碼片段中標記為 subStrings),其中 List 中的每個元素都包含來自該文件每一行的子字符串。 列表中的元素是有序的,因此索引將始終與文件中的行號相同。 例如,List 中的前 4 個元素是

{"EURONAV NV","EURONAV NV","EURONAV NV","NYXOAH S A"}

我想要做的是創建一個與原始文本文件具有相同內容的新文本文件,除了在列表元素中的子字符串附加一個逗號。 所以對於這 4 行,結果如下所示

B38564108,EURONAV NV, SHS,
B38564908,EURONAV NV, CALL,
B38564958,EURONAV NV, PUT,
B6S7WD106,NYXOAH S A, SHS,

我所做的是將原始文件中的行存儲為字符串列表,然后嘗試更新每個元素,並將結果列表寫入新的文本文檔。 這是目前的代碼

File textFile = new File("new_doc.txt");
List<String> lines = FileUtils.readLines(originalTextFile, "UTF-8");
FileWriter fw = new FileWriter(textFile.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
   if (subStrings.size() == lines.size()) {
      for (int i = 0; i < lines.size(); i++) {
        String replacementText = subStrings.get(i).concat(",");
        lines.set(i,lines.get(i).replaceAll(subStrings.get(i), replacementText));
        bw.write(lines.get(i) + System.getProperty("line.separator"));
      }
      bw.close();
    }

新文件創建良好,但內容與原始文件相同。 每行的子字符串都沒有附加逗號。 任何指向我在這里所缺少的方向的指針將不勝感激。 謝謝

我認為這可以滿足您的要求。 (編輯:不,我對您的代碼中出了什么問題感到困惑。仔細檢查輸出,我認為可能還有其他事情發生。您確定您正在查看正確的輸出文件嗎?)

public class ListStringReplace {

   static List<String> subStrings = Arrays.asList( "EURONAV NV", "EURONAV NV", "EURONAV NV", "NYXOAH S A" );
   static List<String> lines = Arrays.asList(
           "B38564108,EURONAV NV SHS",
           "B38564908,EURONAV NV CALL",
           "B38564958,EURONAV NV PUT",
           "B6S7WD106,NYXOAH S A SHS"
   );

   public static void main( String[] args ) {
      substitute();
      System.out.println( "Output:\n" + lines );
   }

   private static void substitute() {
//      File textFile = new File( "new_doc.txt" );
//      List<String> lines = FileUtils.readLines( originalTextFile, "UTF-8" );
//
      if( subStrings.size() == lines.size() ) {
         for( int i = 0; i < lines.size(); i++ ) {
//            String replacementText = subStrings.get( i ).concat( "," );
            lines.set( i, lines.get( i ).replace( subStrings.get( i ), subStrings.get( i ) + "," ) );
         }
//         FileWriter fw = new FileWriter( textFile.getAbsoluteFile() );
//         BufferedWriter bw = new BufferedWriter( fw );
//
//         for( int i = 0; i < lines.size(); i++ ) {
//            bw.write( lines.get( i ) + System.getProperty( "line.separator" ) );
//         }
//         bw.close();
      }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM