回答編集履歴

2

修正されたwhileブロックを追加

2021/01/28 04:17

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -24,8 +24,114 @@
24
24
 
25
25
  - このように複数行に分散して取り込む情報が書かれているのに対応できていません。現状では、「XXXX 代表取締役:○○○○ 会社名  :○○○○ 設立日  :○○○○ 」のように、1行にすべての情報が書かれている前提のコードになっています。
26
26
 
27
- - 行の先頭に「代表取締役」などが書かれていると判定に失敗します。`isTargetLine`で`IndexOf`の返り値が0より大きいことで判定しているためですね。行の先頭に書かれていたら返り値は0になります。
27
+ - 行の先頭に「代表取締役」などが書かれていると判定に失敗します。`isTargetLine`で`IndexOf`の返り値が0より大きいことで判定しているためですね。行の先頭に書かれていたら返り値は0になります。さらに、`isTargetLine`で調べている位置情報3点は、その直後の`main`のコードでも調べているので、`isTargetLine`自体不要なのでは。
28
28
 
29
29
  - 「○○○○」の直後に空白があることを前提としているため、サンプルのように空白がない(改行している)とエラーになります。空白がなければ、行末の位置を`endPos`に設定する必要があります。
30
30
 
31
31
  - 「○○○○」などの値を切り出す位置の計算を間違えています。サンプルの通りであれば、`+ 1`する必要はありません。
32
+
33
+
34
+
35
+ ```Java
36
+
37
+ while ((lineText = br.readLine()) != null) {
38
+
39
+ // 出現位置を取得
40
+
41
+ ceoNamePos = lineText.indexOf(ConstantObjects.MARK_CEO);
42
+
43
+ companyNamePos = lineText.indexOf(ConstantObjects.MARK_COMPANY);
44
+
45
+ estanblishmentDayPos = lineText.indexOf(ConstantObjects.MARK_ESTABLISHMENTDAY);
46
+
47
+ if (ceoNamePos < 0 && companyNamePos < 0 && estanblishmentDayPos < 0) {
48
+
49
+ continue;
50
+
51
+ }
52
+
53
+
54
+
55
+ // 対象の文字列を抽出
56
+
57
+ if (ceoNamePos >= 0) {
58
+
59
+ int startPos = ceoNamePos + ConstantObjects.MARK_CEO.length();
60
+
61
+ int endPos = lineText.indexOf(" ", startPos + 1);
62
+
63
+ if (endPos < 0) {
64
+
65
+ endPos = lineText.length();
66
+
67
+ }
68
+
69
+ ceoName = lineText.substring(startPos, endPos);
70
+
71
+ comInfo.setCeoName(ceoName);
72
+
73
+ }
74
+
75
+
76
+
77
+ if (companyNamePos >= 0) {
78
+
79
+ int startPos = companyNamePos + ConstantObjects.MARK_COMPANY.length();
80
+
81
+ int endPos = lineText.indexOf(" ", companyNamePos);
82
+
83
+ if (endPos < 0) {
84
+
85
+ endPos = lineText.length();
86
+
87
+ }
88
+
89
+ companyName = lineText.substring(startPos, endPos);
90
+
91
+ comInfo.setCoompanyName(companyName);
92
+
93
+ }
94
+
95
+
96
+
97
+ if (estanblishmentDayPos >= 0) {
98
+
99
+ int startPos = estanblishmentDayPos + ConstantObjects.MARK_ESTABLISHMENTDAY.length();
100
+
101
+ int endPos = lineText.indexOf(" ", estanblishmentDayPos);
102
+
103
+ if (endPos < 0) {
104
+
105
+ endPos = lineText.length();
106
+
107
+ }
108
+
109
+ estanblishmentDay = lineText.substring(startPos, endPos);
110
+
111
+ comInfo.setEstanblishmentDay(estanblishmentDay);
112
+
113
+ String dateJP = getJapaneseCalender(estanblishmentDay);
114
+
115
+ // 設立日は和暦に変換
116
+
117
+ comInfo.setEstanblishmentDay(dateJP);
118
+
119
+ }
120
+
121
+
122
+
123
+ if (comInfo.getCeoName() != null && comInfo.getCoompanyName() != null
124
+
125
+ && comInfo.getEstanblishmentDay() != null) {
126
+
127
+ // 一旦積み上げる
128
+
129
+ companies.add(comInfo);
130
+
131
+ comInfo = new CompanyInfo();
132
+
133
+ }
134
+
135
+ }
136
+
137
+ ```

1

さらに間違いを発見したので記述を追加

2021/01/28 04:17

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -27,3 +27,5 @@
27
27
  - 行の先頭に「代表取締役」などが書かれていると判定に失敗します。`isTargetLine`で`IndexOf`の返り値が0より大きいことで判定しているためですね。行の先頭に書かれていたら返り値は0になります。
28
28
 
29
29
  - 「○○○○」の直後に空白があることを前提としているため、サンプルのように空白がない(改行している)とエラーになります。空白がなければ、行末の位置を`endPos`に設定する必要があります。
30
+
31
+ - 「○○○○」などの値を切り出す位置の計算を間違えています。サンプルの通りであれば、`+ 1`する必要はありません。