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

質問編集履歴

3

コード変更

2021/11/01 05:08

投稿

taka0145
taka0145

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- テーブルに合わせてハイフンを連続して示させたい
1
+ javaでのの作成
body CHANGED
@@ -1,40 +1,18 @@
1
1
  ### 前提・実現したいこと
2
- テキストファイルの情報を読み込みそれを基に、以下のような表を作りたいです
2
+ テキストファイルの情報を読み込みそれを基に、表を作
3
- また、条件として、
4
- ①項目名は中央揃え、名前は左揃え、点数は右寄せ
5
- ②テキストファイルの情報は追加されることも考慮する
6
- ③最大文字数に合わせて列の幅を調整
7
3
 
8
4
  ・テキストファイル
9
5
  田中ゆうき,国語,80
10
6
  佐藤かつひこ,数学,50
11
7
 
12
- ・CUI
13
- |   名前   | 国語 | 数学 |
14
- +----------------------------------+
15
- |田中ゆうき   |  80|     |
16
- +---------------------------------+
17
- |佐藤かつひこ |     | 50|
18
- +----------------------------------+
19
8
 
20
9
 
10
+
21
11
  ### 発生している問題・エラーメッセージ
22
12
 
23
13
  ```
24
14
  エラーメッセージ
25
15
 
26
- 現在以下のように表示されています。
27
- 横の"-"を行の最大まで繰り返す方法、
28
- また、該当の科目欄に点数を表示させたいのですが、
29
- CSVファイル読み取りのまま表示させることしかできず、手詰まりの状態です。
30
- どなたかご教授頂けないでしょうか。
31
-
32
-  
33
- |名前    |国語|数学|
34
- -
35
- |田中ゆうき |国語| 80|
36
- -
37
- |佐藤かつひこ|数学| 50|
38
16
  ```
39
17
 
40
18
  ### 該当のソースコード
@@ -62,122 +40,10 @@
62
40
 
63
41
  String[][] data = lineList.toArray(new String[lineList.size()][]);
64
42
 
65
- drawTable(data);
66
- writeTable(data);
67
- }
68
-
69
- //1行目の縦方向の表示
70
- public static void drawTable( String[][] data ) {
71
-
72
- int[] max = maxWidth( data );
73
- for( int i = 0; i < 1; i++ ) {
74
- drawLine( data[i], max );
75
- System.out.print( "|" );
76
- System.out.println();
77
- System.out.print("-");
78
- System.out.println();
79
- }
80
- }
81
-
82
- //1行目の横方向の表示
83
- private static void drawLine( String[] line, int[] max ) {
84
43
 
85
- //1行目を中央揃え
86
- for( int j = 0; j < line.length; j++ ) {
87
- int s = ( max[j] - count( line[j] ) );
88
- int s1, s2;
89
- if( (s % 2) == 0 ) {
90
- s1 = s2 = s/2;
91
- } else {
92
- s1 = s/2 + 1; s2 = s/2;
93
- }
94
- System.out.print( "|" );
95
- for( int k = 1; k <= s1; k++ ) {
96
- System.out.print( " " );
97
- }
98
- System.out.print( line[j] );
99
- for( int k = max[j] - s2; k < max[j]; k++ ) {
100
- System.out.print( " " );
101
- }
102
-
103
- }
104
- }
105
-
106
- //2行目以降の縦方向の表示
107
- public static void writeTable( String[][] data ) {
108
-
109
- int[] max = maxWidth( data );
110
- for( int i = 1; i < data.length; i++ ) {
111
- writeLine( data[i], max );
112
- System.out.print( "|" );
113
- System.out.println();
114
- System.out.print("-");
115
- System.out.println();
116
- }
117
-
118
44
  }
119
45
 
120
- //2行目以降の横方向の表示
121
- private static void writeLine( String[] line, int[] max ) {
122
-
123
- //1列目を左寄せ
124
- for( int j = 0; j < 1; j++ ) {
125
- System.out.print( "|" + line[j] );
126
- for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
127
- System.out.print( " " );
128
- }
129
- }
130
- //2列目以降を右寄せ
131
- for( int j = 1; j < line.length; j++ ) {
132
- System.out.print( "|" );
133
- for( int k=count( line[j] ) + 1; k <= max[j]; k++ ) {
134
- System.out.print( " " );
135
- }
136
- System.out.print( line[j] );
137
- }
138
- }
139
46
 
140
-
141
- //列の幅の最大を求める
142
- private static int[] maxWidth( String[][] data ) {
143
- int[] max = new int[ data[0].length ];
144
- for( int j = 0; j < data[0].length; j++ ) {
145
- max[j] = 0;
146
- for( int i = 0; i < data.length; i++ ) {
147
- int n = count( data[i][j] );
148
- if( n > max[j] ) {
149
- max[j] = n;
150
- }
151
- }
152
- }
153
- return max;
154
- }
155
-
156
- //英数字、カタカナ、ひらがな、漢字の文字コードを分類する
157
- public static int count( String str ) {
158
-
159
- int count = 0;
160
- char[] a = str.toCharArray();
161
- for( int i=0; i<str.length(); i++ ) {
162
- if( Character.UnicodeBlock.of( a[i] ).equals
163
- ( Character.UnicodeBlock.BASIC_LATIN ) ) {
164
- count++;
165
- }
166
- else if( Character.UnicodeBlock.of( a[i] ).equals
167
- ( Character.UnicodeBlock.KATAKANA ) ) {
168
- count+=2;
169
- }
170
- else if( Character.UnicodeBlock.of( a[i] ).equals
171
- ( Character.UnicodeBlock.HIRAGANA ) ) {
172
- count+=2;
173
- }
174
- else if( Character.UnicodeBlock.of( a[i] ).equals
175
- ( Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) ) {
176
- count+=2;
177
- }
178
- }
179
- return count;
180
- }
181
47
 
182
48
  }
183
49
  ```

2

質問タイトルの変更

2021/11/01 05:08

投稿

taka0145
taka0145

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- CSVファイルを読み取り、表を作成したい
1
+ テーブに合わせてハイフン連続て表示させたい
body CHANGED
File without changes

1

書式の改善

2021/10/10 07:47

投稿

taka0145
taka0145

スコア7

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,4 @@
1
1
  ### 前提・実現したいこと
2
-
3
2
  テキストファイルの情報を読み込みそれを基に、以下のような表を作りたいです。
4
3
  また、条件として、
5
4
  ①項目名は中央揃え、名前は左揃え、点数は右寄せ
@@ -36,12 +35,11 @@
36
35
  |田中ゆうき |国語| 80|
37
36
  -
38
37
  |佐藤かつひこ|数学| 50|
39
- -
38
+ ```
40
39
 
41
40
  ### 該当のソースコード
42
41
 
43
42
  ```java
44
-
45
43
  class Sample {
46
44
 
47
45