質問するログイン新規登録

回答編集履歴

4

StringTokenizerについて修正

2018/01/15 17:20

投稿

tignear
tignear

スコア260

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

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

2018/01/15 17:20

投稿

tignear
tignear

スコア260

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]+","+header[1]);
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修正

2018/01/15 16:26

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -12,8 +12,8 @@
12
12
  →``LinkedHashMap``使おう
13
13
  #気になる点
14
14
  **例外発生時にbrが閉じられない**
15
- - finally使う
15
+ - finally使う
16
- - try with resources使う
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
- mao.forEach((k,v)->System.out.println(k+":"+v));
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

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

2018/01/15 14:15

投稿

tignear
tignear

スコア260

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