2017-01-02 12 views
4

次のコードでJavaコードから生成されたテキストファイルから^ M文字を削除する方法を考えています。Javaを使用してプラットフォームに依存しないテキストファイルから^ M文字を削除するにはどうすればよいですか?

public StringBuilder toCsv(Table table) { 
     StringBuilder stringBuilder = new StringBuilder(); 
     String csv = new String(); 
     for (Column cName : table.getColumns()){ 
      csv += QUOT; 
      csv += cName.getName(); 
      csv += QUOT; 
      csv += CSV_SEPERATOR; 
     } 

     csv += "\n"; 
     stringBuilder.append(csv); 

     for (Row row : table) { 
      Collection<Object> values = row.values(); 
      String csvString = ""; 
      if (values.size() == 10) { 
       String ep = QUOT + CSV_SEPERATOR + QUOT ; 
       csvString = StringUtils.join(row.values(),ep); 
       csvString.replaceAll("\'", ""); 
       csvString = QUOT + csvString + QUOT; 
       logger.info("line ++++ " + csvString); 
      } 
      stringBuilder.append(csvString); 
      stringBuilder.append("\n"); 
     } 

     return stringBuilder; 
    } 

その後、私はマイクロソフトのアクセス(.mdb)ファイルからhttp://jackcess.sourceforge.net/を使用してCSVファイルを生成しています

public void writeCsv(String data, String path, String fileName) throws IOException { 
    String completePath = path + "/" + fileName; 
    Writer out = new BufferedWriter(new OutputStreamWriter(
      new FileOutputStream(completePath))); 
    try { 
     out.write(data); 
    } finally { 
     out.close(); 
    } 
} 

コンテキスト

をファイルにデータを書き込むために、次の方法を使用しています。私がcsvを生成してvimを使って開くと、行の途中で^ Mがたくさん見えます。注:私はMacOSの

日午前私は

csvLine.replaceAll("\n\r", ""); 

csvLine.replaceAll("\r\n", ""); 

をCSVファイルに書き込む前に^ M(私はMS WindowsのCARRIAGE_RETURNであると信じて)削除するには、次の試してみました
csvLine.replaceAll("\\r", ""); 

生成されたCSV

'10773.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'10000.0';'';'2102.0' 
    '10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470^M 
     ^M 
     ^M 
087470';'-45000.0';'';'2102.0' 
'10360.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'37000.0';'';'2101.0' 
'10444.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'2000.0';'';'2101.0' 

上記の1行がわかるように、CSVは望ましくない^ Mで壊れています。 プログラムからそのような文字をファイルから削除する必要があります。^Mと進行ライン

'10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470087470';'-45000.0';'';'2102.0' 

任意の助けを除去した後

予想される出力が理解されるであろう。

+0

奇妙なことに、数字のように見える奇妙な文字がフィールドにあります。 –

+0

mdbから読み込んだ後、csvファイルをどのように記述するのか正確なコードを表示してください。 –

+0

@Würgspass - 更新コード – amjad

答えて

3

文字列は不変なので、.replaceAllメソッドは既存の文字列の値を変更しません。置換を実行して新しいString値を返します。だから、

String csvString = "123,foo,234"; 
csvString.replaceAll("foo", ""); 
System.out.println(csvString); 

印刷物の文字列が変更されていないことを示す

123,foo,234 

。何がやりたいことは、あなたの特定のケースでは

123,,234 

を印刷し

String csvString = "123,foo,234"; 
csvString = csvString.replaceAll("foo", ""); // save the new value 
System.out.println(csvString); 

あり、それはあなたが両方削除したいので、

csvString = csvString.replaceAll("\r\n", ""); // save the new value 

をやりたいように見えますcarriage_return(これは^Mと表示されます)とnew_line(テキストファイルの新しい行を開始します)。

+0

ありがとう@Grod。圧力の下で私はばかげた間違いをしました。 – amjad

関連する問題