質問するログイン新規登録

回答編集履歴

1

コメントに対する追記

2018/06/08 05:17

投稿

tkturbo
tkturbo

スコア5572

answer CHANGED
@@ -11,4 +11,72 @@
11
11
  ```
12
12
 
13
13
  ↑ここでエラーが起こっているのが分かりますが、ここの「excapeSeparator(value)」も「isEscapeDisabled()」も引数渡しされた「this.createCsvConfig()」の結果を利用して処理しています。
14
- 今提示済みのソースからわかることは「『createCsvConfig()』の中身がおかしいのではないか」という程度です。
14
+ 今提示済みのソースからわかることは「『createCsvConfig()』の中身がおかしいのではないか」という程度です。
15
+
16
+ ### **追記**
17
+ 以下、コメント(2018/06/08 13:33)に返信。
18
+
19
+ まず、コメント記載のソースコードを整形しておきます。
20
+
21
+ ```
22
+ @Override
23
+ protected CsvConfig createCsvConfig() {
24
+ CsvConfig cfg = new CsvConfig(',');
25
+ cfg.setLineSeparator("\r\n");
26
+ cfg.setNullString("");
27
+ cfg.setQuotePolicy(QuotePolicy.MINIMAL);
28
+ ```
29
+
30
+
31
+ そのうえで、最初の回答から再度引用。
32
+
33
+ ```
34
+ final String s = escapeSeparator(value);
35
+ if (!value.equals(s) && cfg.isEscapeDisabled()) {
36
+ ```
37
+
38
+ ↑ちゃんと読めば、まず「cfg.isEscapeDisabled()がtrueを返しているからifブロックに入る」というのが分かります。
39
+
40
+ そのうえで、[CsvConfigのソースコード](https://github.com/orangesignal/orangesignal-csv/blob/master/src/main/java/com/orangesignal/csv/CsvConfig.java)、特に引数にcharのみを指定するコンストラクタに着目します。
41
+
42
+ ```
43
+ /**
44
+ * コンストラクタです。
45
+ *
46
+ * @param separator 区切り文字
47
+ */
48
+ public CsvConfig(final char separator) {
49
+ this(separator, DEFAULT_QUOTE, DEFAULT_ESCAPE, true, true);
50
+ }
51
+ ```
52
+
53
+ ↑引数を5つ必要とする別のコンストラクタを呼び出していることが分かります。
54
+
55
+ ```
56
+ /**
57
+ * コンストラクタです。
58
+ *
59
+ * @param separator 区切り文字
60
+ * @param quote 囲み文字
61
+ * @param escape エスケープ文字
62
+ * @param quoteDisabled 囲み文字を無効にするかどうか
63
+ * @param escapeDisabled エスケープ文字を無効にするかどうか
64
+ * @throws IllegalArgumentException {@code quote} または {@code escape} が {@code separator} と同一文字の場合
65
+ */
66
+
67
+ public CsvConfig(final char separator, final char quote, final char escape, final boolean quoteDisabled, final boolean escapeDisabled) {
68
+ this.separator = separator;
69
+ this.quote = quote;
70
+ this.escape = escape;
71
+ this.quoteDisabled = quoteDisabled;
72
+ this.escapeDisabled = escapeDisabled;
73
+ }
74
+ ```
75
+
76
+ ↑これにより、フィールド「escapeDisabled」にtrueが設定されてしまっている。これが問題とわかります。
77
+
78
+ 解決するには「setEscapeDisabled(false)」してやればいいんじゃないかな、とたどり着けるわけですが、
79
+
80
+ > このようになっています。
81
+
82
+ ↑公開されているソースコードのURLが最初の回答からわかるんだから、**自分で調べてみる**、という手段はなかったのでしょうか?