回答編集履歴

4

StringTokenizerについて修正

2018/01/15 17:20

投稿

tignear
tignear

スコア260

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

出力と型が一部間違えてたので修正

2018/01/15 17:20

投稿

tignear
tignear

スコア260

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]+","+header[1]);
67
+ System.out.println(header[0]+",総合");
68
68
 
69
69
  map.forEach((k,v)->System.out.println(k+":"+v));
70
70
 

2

typo修正

2018/01/15 16:26

投稿

tignear
tignear

スコア260

test CHANGED
@@ -26,9 +26,9 @@
26
26
 
27
27
  **例外発生時にbrが閉じられない**
28
28
 
29
- - finally使う
29
+ - finally使う
30
30
 
31
- - try with resources使う
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
- mao.forEach((k,v)->System.out.println(k+":"+v));
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

具体例追加。幾つか修正。

2018/01/15 14:15

投稿

tignear
tignear

スコア260

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
- map.merge(cate,val,Integer::sum);//使えないなら普通に足すこと
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な感じでも書こうと思ったけどヘッダー行のせいでメンドーなことに。