CSVファイルでカンマとダブルクォートを同時にエスケープするには?
2023-11-25 03:12:28
質問
OracleからcsvファイルへデータをエクスポートするJavaアプリを書いています。
残念ながら、データの内容はかなりトリッキーかもしれません。カンマは区切り文字なのですが、ある行のデータはこのようになっていることがあります。
| ID | FN | LN | AGE | COMMENT |
|----------------------------------------------------------------|
| 123 | John | Smith | 39 | I said "Hey, I am 5'10"." |
|----------------------------------------------------------------|
の文字列の1つです。
comment
の列の一つです。
私は、"Hey, I am 5'10"." と言った。
冗談抜きで、私はJavaで生成されたCSVファイルからExcelやOpen Officeで妥協せずに上記のコメントを表示する必要があり、もちろん他の正規エスケープ状況(すなわち、正規ダブルクォート、タプル内の正規カンマ)を台無しにすることはできません。正規表現が強力であることは知っていますが、このような複雑な状況で目標を達成するにはどうしたらよいでしょうか?
どのように解決するのですか?
いくつかのライブラリがあります。以下に2つの例を示します。
❐ Apache Commons Lang
アパッチコモンズランゲージ
には、文字列 (CSV, EcmaScript, HTML, Java, Json, XML) をエスケープしたりアンエスケープしたりするための特別なクラスが含まれています。
org.apache.commons.lang3.StringEscapeUtils
.
-
脱出 をCSVに変換
String escaped = StringEscapeUtils .escapeCsv("I said \"Hey, I am 5'10\".\""); // I said "Hey, I am 5'10"." System.out.println(escaped); // "I said ""Hey, I am 5'10""."""
-
脱出 をCSVから削除
String unescaped = StringEscapeUtils .unescapeCsv("\"I said \"\"Hey, I am 5'10\"\".\"\"\""); // "I said ""Hey, I am 5'10"".""" System.out.println(unescaped); // I said "Hey, I am 5'10"."
* からダウンロードできます。 ここから .
➤ OpenCSV
もし、あなたが OpenCSV を使えば、エスケープやアンエスケープを気にすることなく、コンテンツの書き込みや読み出しだけができます。
-
ファイルを書き込む。
FileOutputStream fos = new FileOutputStream("awesomefile.csv"); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); CSVWriter writer = new CSVWriter(osw); ... String[] row = { "123", "John", "Smith", "39", "I said \"Hey, I am 5'10\".\"" }; writer.writeNext(row); ... writer.close(); osw.close(); os.close();
-
ファイルを読み込んでいます。
FileInputStream fis = new FileInputStream("awesomefile.csv"); InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); CSVReader reader = new CSVReader(isr); for (String[] row; (row = reader.readNext()) != null;) { System.out.println(Arrays.toString(row)); } reader.close(); isr.close(); fis.close();
* からダウンロードできます。 ここから .
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
java.sql.SQLException: 結果セットの開始前
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] 既存のcsvファイルにpandasのデータを追加するには?
-
[解決済み] Javaで正規表現のテキストをエスケープする方法
-
[解決済み] CSVファイルをMySQLのテーブルにインポートするには?
-
[解決済み】CSVで二重引用符を正しくエスケープする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Javaでよくある構文エラー
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
無効な文字定数
-
SocketException java.netの4つの例外解決策。
-
FindBugの使用概要
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
java send https request prompt java.security.cert.について。
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集