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