今、
a 001 1
a 002 1
b 002 2
b 003 2
c 001 2
c 002 4
c 004 3
d 003 2
d 005 1
e 006 4
このように並んでいる表を
001 002 003 004 005 006
a 1 1 0 0 0 0
b 0 2 2 0 0 0
c 2 4 0 3 0 0
d 0 0 2 0 1 0
e 0 0 0 0 0 4
というような表に書き換えたいのですが、
何かいい方法はないでしょうか?
データ数が膨大なので、EXCELなどでやるわけにもいかず困っています。
javaでプログラムを組もうと思っているのですが、
具体的にどのようにすればいいものでしょうか?
No.3ベストアンサー
- 回答日時:
a 001 1
というデータの、"a"の部分をY座標に。"001"の部分をX座標に変換できる関数を作れば、配列として扱えるようになるので、後は楽だと思います。
データの仕様が書かれていないので、適当に想像して書いてみました。
表の大きさ(X,Yの最大値)が決まっていれば、サンプルのように配列でいいですが、これが未定の場合は、Mapなどを使うと良いと思います。
static String[] lines = {
"a 001 1",
"a 002 1",
~中略~
"e 006 4",
};
public static void main(String[] args){
int [][] values = new int[10][10]; //ここでは、10x10の表とする
//読み込んだデータを1つずつ処理する
for (int i = 0; i < lines.length; i++){
String[] elements = lines[i].split(" "); //スペースで分割
int x = getX(elements[1]);
int y = getY(elements[0]);
values[y][x] = Integer.parseInt(elements[2]); //数値化
}
//valuesの中身を確認
for (int y = 0; y < values.length; y++){
for (int x = 0; x < values[y].length; x++){
System.out.print(values[y][x] + ",");
}
System.out.println();
}
}
private static int getY(String s){
return (int)(s.charAt(0) - 'a'); //a->0, b->1, c->2に変換
}
private static int getX(String s){
String temp = s.replaceAll("^[0]+", ""); //先頭の0を除去
return Integer.parseInt(temp) - 1; //数値化して-1する
}
No.4
- 回答日時:
試しに作ってみました。
適宜状況に合わせて変更して下さい。
----------------------------------------------------------------
import java.io.*;
import java.util.*;
class Convert {
public static void main(String args[]){
Scanner sc = null;
TreeSet<String> tsn = new TreeSet<String>();
TreeSet<String> tsi = new TreeSet<String>();
TreeMap<String,Integer> tm = new TreeMap<String,Integer>();
String inName="";
String inIndex="";
int inNum=0;
try{
sc = new Scanner(new File("data.txt"));
while(sc.hasNext()){
inName = sc.next();
tsn.add(inName);
inIndex = sc.next();
tsi.add(inIndex);
inNum = sc.nextInt();
tm.put(inName+":"+inIndex, inNum);
}
sc.close();
}
catch(FileNotFoundException e){
System.out.println("ファイルが無い:" + e);
}
catch(InputMismatchException e){
System.out.println("データ不良:" + e);
}
for(String index : tsi){
System.out.print(" " + index);
}
System.out.println();
for(String s : tsn){
System.out.print(s);
for(String i : tsi){
System.out.print(" " + ((tm.get(s+":"+i)==null)? 0 : tm.get(s+":"+i)));
}
System.out.println();
}
}
}
No.2に加え、プログラムを組んでいただき本当にありがとうございました。
勉強不足でまだわからないところもあるのですが、
ぜひぜひ参考にさせていただきます。
本当にありがとうございました。
No.2
- 回答日時:
Mapを使ってできるんじゃないかな。
もし、データ数が大きすぎて処理できないのであれば、
最初にa,b,c…のような処理リストを作って、
aだけを処理して出力
bだけを処理して追加出力みたいな感じでいいんでないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
3桁のカウンター表示
-
九九の表
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
countに実行した回数をいれたい...
-
java キーボード入力された値の...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java CDLC 1.0 での日付計算
-
変数を動的に利用するには?
-
System.err. printlnとSystem.o...
-
JSPやサーブレットでSystem.out...
-
C#で、あるクラスのメンバーす...
-
System.out.printlnの出力先
-
オブジェクトの中のプロパティ...
-
ORA-01858: 数値を指定する箇所...
-
Path型をString型へ変換する(Java)
-
IF関数でEmpty値を設定する方法。
-
Javaで改行などが出来ないのです。
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
総称型ArrayList<E>への参照...
-
JAVAのfor文で困っています。
-
テキストボックスに入力された...
-
Java、2の0乗~10乗の表示
-
コマンドライン引数の例外処理...
-
7つ数字を表示したら改行すると...
-
数値⇒漢数字変換 java
-
countに実行した回数をいれたい...
-
Ctrl+Zが入力されると終了する...
-
Java 入力した整数値の合計を、...
-
繰り返しによる星印の出力
-
配列から最大値・最小値
-
2つのスクロールバーを連動させ...
-
要素数が10の配列で、乱数0~9...
-
2次元配列の並び替え
-
javaです。1月1日から日数入れ...
おすすめ情報