回答編集履歴
4
StringTokenizerについて修正
answer
CHANGED
@@ -15,9 +15,9 @@
|
|
15
15
|
- finally使う
|
16
16
|
- try with resources使う
|
17
17
|
|
18
|
-
**StringTokenizerは
|
18
|
+
**StringTokenizerはレガシークラス(新規での使用は勧められない)**
|
19
19
|
``String#split(String)``使う
|
20
|
-
|
20
|
+
``java.util.regix``使う
|
21
21
|
|
22
22
|
#上2つを直したやつ
|
23
23
|
```java
|
3
出力と型が一部間違えてたので修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
#上2つを直したやつ
|
23
23
|
```java
|
24
24
|
try(BufferedReader br=new BufferedReader(new FileReader("c:\Users\data.csv"))){
|
25
|
-
String header=br.readLine().split(",");//一行目見出し
|
25
|
+
String[] header=br.readLine().split(",");//一行目見出し
|
26
26
|
String line;
|
27
27
|
while((line=br.readLine())!=null){
|
28
28
|
HashMap<String,Integer> map=new HashMap<>();
|
@@ -31,7 +31,7 @@
|
|
31
31
|
Integer val=Integer.valueOf(token[2]);
|
32
32
|
map.merge(cate,val,Integer::sum);
|
33
33
|
}
|
34
|
-
System.out.println(header[0]+","
|
34
|
+
System.out.println(header[0]+",総合");
|
35
35
|
map.forEach((k,v)->System.out.println(k+":"+v));
|
36
36
|
}catch(IOException ex){
|
37
37
|
ex.printStackTrace();
|
2
typo修正
answer
CHANGED
@@ -12,8 +12,8 @@
|
|
12
12
|
→``LinkedHashMap``使おう
|
13
13
|
#気になる点
|
14
14
|
**例外発生時にbrが閉じられない**
|
15
|
-
|
15
|
+
- finally使う
|
16
|
-
|
16
|
+
- try with resources使う
|
17
17
|
|
18
18
|
**StringTokenizerは過剰**
|
19
19
|
``String#split(String)``使う
|
@@ -32,7 +32,7 @@
|
|
32
32
|
map.merge(cate,val,Integer::sum);
|
33
33
|
}
|
34
34
|
System.out.println(header[0]+","+header[1]);
|
35
|
-
|
35
|
+
map.forEach((k,v)->System.out.println(k+":"+v));
|
36
36
|
}catch(IOException ex){
|
37
37
|
ex.printStackTrace();
|
38
38
|
}
|
@@ -40,5 +40,6 @@
|
|
40
40
|
**問題点**
|
41
41
|
想定していた出力順を得られない→解決策は同じ
|
42
42
|
|
43
|
+
#一言
|
43
44
|
問題点は明確でない仕様のせいであるかないかわからなくなってます。
|
44
45
|
Java8な感じでも書こうと思ったけどヘッダー行のせいでメンドーなことに。
|
1
具体例追加。幾つか修正。
answer
CHANGED
@@ -1,10 +1,44 @@
|
|
1
|
-
hashmapにぶち込めばいいんじゃないかな?
|
1
|
+
#hashmapにぶち込めばいいんじゃないかな?
|
2
2
|
```java
|
3
3
|
HashMap<String,Integer> map=new HashMap<>();
|
4
4
|
while (token.hasMoreTokens()) {
|
5
|
-
String cate=token.nextToken();
|
5
|
+
String cate=token.nextToken(); token.nextToken();
|
6
|
-
token.nextToken();
|
7
|
-
|
6
|
+
Integer val=Integer.valueOf(token.nextToken());
|
8
|
-
|
7
|
+
map.merge(cate,val,Integer::sum);//使えないなら普通に足すこと
|
9
8
|
}
|
10
|
-
```
|
9
|
+
```
|
10
|
+
**問題点**
|
11
|
+
想定している出力順と違う可能性がある
|
12
|
+
→``LinkedHashMap``使おう
|
13
|
+
#気になる点
|
14
|
+
**例外発生時にbrが閉じられない**
|
15
|
+
- finally使う
|
16
|
+
- try with resources使う
|
17
|
+
|
18
|
+
**StringTokenizerは過剰**
|
19
|
+
``String#split(String)``使う
|
20
|
+
これは考え方にもよるかもしれません
|
21
|
+
|
22
|
+
#上2つを直したやつ
|
23
|
+
```java
|
24
|
+
try(BufferedReader br=new BufferedReader(new FileReader("c:\Users\data.csv"))){
|
25
|
+
String header=br.readLine().split(",");//一行目見出し
|
26
|
+
String line;
|
27
|
+
while((line=br.readLine())!=null){
|
28
|
+
HashMap<String,Integer> map=new HashMap<>();
|
29
|
+
String[] token=line.split(",");
|
30
|
+
String cate=token[0];
|
31
|
+
Integer val=Integer.valueOf(token[2]);
|
32
|
+
map.merge(cate,val,Integer::sum);
|
33
|
+
}
|
34
|
+
System.out.println(header[0]+","+header[1]);
|
35
|
+
mao.forEach((k,v)->System.out.println(k+":"+v));
|
36
|
+
}catch(IOException ex){
|
37
|
+
ex.printStackTrace();
|
38
|
+
}
|
39
|
+
```
|
40
|
+
**問題点**
|
41
|
+
想定していた出力順を得られない→解決策は同じ
|
42
|
+
|
43
|
+
問題点は明確でない仕様のせいであるかないかわからなくなってます。
|
44
|
+
Java8な感じでも書こうと思ったけどヘッダー行のせいでメンドーなことに。
|