回答編集履歴

1

コメントに対する追記

2018/06/08 05:17

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -25,3 +25,139 @@
25
25
  ↑ここでエラーが起こっているのが分かりますが、ここの「excapeSeparator(value)」も「isEscapeDisabled()」も引数渡しされた「this.createCsvConfig()」の結果を利用して処理しています。
26
26
 
27
27
  今提示済みのソースからわかることは「『createCsvConfig()』の中身がおかしいのではないか」という程度です。
28
+
29
+
30
+
31
+ ### **追記**
32
+
33
+ 以下、コメント(2018/06/08 13:33)に返信。
34
+
35
+
36
+
37
+ まず、コメント記載のソースコードを整形しておきます。
38
+
39
+
40
+
41
+ ```
42
+
43
+ @Override
44
+
45
+ protected CsvConfig createCsvConfig() {
46
+
47
+ CsvConfig cfg = new CsvConfig(',');
48
+
49
+ cfg.setLineSeparator("\r\n");
50
+
51
+ cfg.setNullString("");
52
+
53
+ cfg.setQuotePolicy(QuotePolicy.MINIMAL);
54
+
55
+ ```
56
+
57
+
58
+
59
+
60
+
61
+ そのうえで、最初の回答から再度引用。
62
+
63
+
64
+
65
+ ```
66
+
67
+ final String s = escapeSeparator(value);
68
+
69
+ if (!value.equals(s) && cfg.isEscapeDisabled()) {
70
+
71
+ ```
72
+
73
+
74
+
75
+ ↑ちゃんと読めば、まず「cfg.isEscapeDisabled()がtrueを返しているからifブロックに入る」というのが分かります。
76
+
77
+
78
+
79
+ そのうえで、[CsvConfigのソースコード](https://github.com/orangesignal/orangesignal-csv/blob/master/src/main/java/com/orangesignal/csv/CsvConfig.java)、特に引数にcharのみを指定するコンストラクタに着目します。
80
+
81
+
82
+
83
+ ```
84
+
85
+ /**
86
+
87
+ * コンストラクタです。
88
+
89
+ *
90
+
91
+ * @param separator 区切り文字
92
+
93
+ */
94
+
95
+ public CsvConfig(final char separator) {
96
+
97
+ this(separator, DEFAULT_QUOTE, DEFAULT_ESCAPE, true, true);
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ ↑引数を5つ必要とする別のコンストラクタを呼び出していることが分かります。
106
+
107
+
108
+
109
+ ```
110
+
111
+ /**
112
+
113
+ * コンストラクタです。
114
+
115
+ *
116
+
117
+ * @param separator 区切り文字
118
+
119
+ * @param quote 囲み文字
120
+
121
+ * @param escape エスケープ文字
122
+
123
+ * @param quoteDisabled 囲み文字を無効にするかどうか
124
+
125
+ * @param escapeDisabled エスケープ文字を無効にするかどうか
126
+
127
+ * @throws IllegalArgumentException {@code quote} または {@code escape} が {@code separator} と同一文字の場合
128
+
129
+ */
130
+
131
+
132
+
133
+ public CsvConfig(final char separator, final char quote, final char escape, final boolean quoteDisabled, final boolean escapeDisabled) {
134
+
135
+ this.separator = separator;
136
+
137
+ this.quote = quote;
138
+
139
+ this.escape = escape;
140
+
141
+ this.quoteDisabled = quoteDisabled;
142
+
143
+ this.escapeDisabled = escapeDisabled;
144
+
145
+ }
146
+
147
+ ```
148
+
149
+
150
+
151
+ ↑これにより、フィールド「escapeDisabled」にtrueが設定されてしまっている。これが問題とわかります。
152
+
153
+
154
+
155
+ 解決するには「setEscapeDisabled(false)」してやればいいんじゃないかな、とたどり着けるわけですが、
156
+
157
+
158
+
159
+ > このようになっています。
160
+
161
+
162
+
163
+ ↑公開されているソースコードのURLが最初の回答からわかるんだから、**自分で調べてみる**、という手段はなかったのでしょうか?