またまた、AOJでリハビリプログラミング
今日は、前の問題の次の問題を解いている
そのため、前の問題と似ているところがあり
少しだけ、昨日のコードを流用させていただいた。
昨日とコードが少しかぶっているのと2日連続のコーディングにより
すこしずつ、コーディングにかかる時間が短縮されたように感じる。
これもまた、昨日のと同様に入力ファイルの指定はコマンドライン引数で指定している。
他の仕様に関しては、上にのせているページと同じ通りである。
入力例と出力例はページに載っている通りなのでここでは割愛。
~FileRead.java~
package dataConversion_0501;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileRead {
private ArrayList<String> before = new ArrayList<String>();
private ArrayList<String> after = new ArrayList<String>();
private ArrayList<String> input = new ArrayList<String>();
/**
* @return the before
*/
public ArrayList<String> getBefore() {
returnbefore;
}
/**
* @return the after
*/
public ArrayList<String> getAfter() {
returnafter;
}
/**
* @return the input
*/
public ArrayList<String> getInput() {
returninput;
}
public void fileRead(String filename){
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(filename);
br = new BufferedReader(fr);
String line;
int i;
while*1 != null){ //1行読む
i = Integer.parseInt(line); //数字に変換
if(i == 0) break; //EoFとしての0がきたらメソッド終了
for(int k = 0; k < i; k++){
line = br.readLine();
String word = line.split(" ", 0);
before.add(word[0]);
after.add(word[1]);
if(k == i-1){
before.add(null);
after.add(null);
}
}
line = br.readLine();
i = Integer.parseInt(line);
for(int k = 0; k < i; k++){
line = br.readLine();
input.add(line);
//複数入力間において間のデータにnullを代入する。
if(k == i-1){
input.add(null);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
~Conversion.java~
package dataConversion_0501;
public class Conversion {
private static FileRead file = new FileRead();
public void conversion(){
System.out.println(file.getBefore());
System.out.println(file.getAfter());
for(int i = 0; i < file.getInput().size(); i++){
//入力が次の入力に切り替わるとき
if(file.getInput().get(i) == null){
System.out.println(); //改行処理
while(file.getBefore().get(0) != null){
file.getBefore().remove(0);
file.getAfter().remove(0);
}
//nullも除去
file.getBefore().remove(0);
file.getAfter().remove(0);
continue;
}
//入力がまだあるとき
for(int k = 0; file.getBefore().get(k) != null; k++){
if(file.getBefore().get(k).equals(file.getInput().get(i))){
file.getInput().remove(i);
file.getInput().add(i, file.getAfter().get(k));
break;
}
}
System.out.print(file.getInput().get(i));
}
}
public static void main(String args){
file.fileRead(args[0]);
Conversion con = new Conversion();
con.conversion();
}
}
*1:line = br.readLine(