- 締切済み
行単位の文字列処理
JAVA初心者です。 以下のようなファイル形式があります。 ファイル名(TEXT.TXT) //////////////////////////////////// Aa BFUNC1,abc,def Ab BFUNC2,ghi BFUNC3 /////////////////////////////////// ファイル行単位の先頭(1文字目)に処理の判定識別子が付きます。 A:2文字目の文字を既存の設定してある文字と置き換える。 B:,で区切り最初が関数名次からが引数になります。(例FUNC1(abc,def)) 上記をJAVAで記述したい場合どのようにしたらいいでしょうか? FileReader in = new FileReader("TEST.TXT"); BufferedReader br = new BufferedReader(in); String line; while ((line = br.readLine()) != null) { /*行単位の先頭一文字をチェック*/ switch(){ ←行単位の先頭一文字を判定するには記述するには? CASE: "A": /*文字列置換*/ br.replace(str ,br); break; CASE:"B": /*方法(1)","で分解して連結する。最初はNextTokenで文字列を連結 させ、次に"("をつけ、次からNextTokenで","をつけていく。","がな くなったら")"をつけるようにするには? */ /*方法(2)","の最初は関数名なのでNextTokenで(1)と同様に"("をつけ る。次からは行末尾までを一度に連結させ、最後に")"をつけるように するには?*/ break; } } ?の個所を教えてください。 ほかに簡単な記述などあればそちらも教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- _ranco_
- ベストアンサー率58% (126/214)
1問目については、String.replace()メソッドのシグネチャとドキュメンテーションをよく見てください。単なる、replace(...)という呼び出しはありえません。2問目については、ご質問の意味がよく分かりませんし、質問に付随するコードも理解できません。次の機会には、要求をわかりやすく説明してください。
- _ranco_
- ベストアンサー率58% (126/214)
TEST.TXTの内容が入力データの全形式を網羅しているなら、こんなコードで間に合うでしょう:(全角スペースは半角に変換してください。) -------------------------------------------------------- import java.io.*; public class Upst{ static char rept = 'x'; public static void main(String[] args) throws Exception{ String line, fname, argslist; BufferedReader br = new BufferedReader(new FileReader("TEST.TXT")); while ((line = br.readLine()) != null) { switch(line.charAt(0)){ // 行の先頭の文字 case 'A': line = "A" + rept; break; case 'B': if (line.indexOf(',') != -1){ fname = line.substring(1, line.indexOf(",")); //関数名 argslist = line.substring(line.indexOf(',') + 1); //引数リスト line = fname + "(" + argslist + ")"; } else{ fname = line.substring(1); line = fname + "()"; } break; } // switch System.out.println(line); } // while } // main() } // class --------------------------------------
補足
_ranco_様 回答ありがとうございます。 2点追加で聞きたいことがあります。 line = "A" + rept; は連結ですが、2文字目をreptにおきえるには replace(rept,line.charAt(1); で問題ないでしょうか? ////////////////////////// Astr1,a Astr2,b Astr3,c ////////////////////////// Aの場合で2文字目,に変換する対象文字列の変数があり次の文字 が変換するようにしたい場合は下記のようなやり方でしょうか? case 'A': にif(line.equals(str1));{ /* aの値を設定するには?*/ str1 = line.substring(line.indexOf(',') + 1); で問題ないでしょうか? }else if(line.equals(str2));{ /* bの値を設定するには?*/ }else { /* cの値を設定するには?*/ } よろしくお願いします。