• 締切済み

行単位の文字列処理

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; } }   ?の個所を教えてください。 ほかに簡単な記述などあればそちらも教えてください。

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

1問目については、String.replace()メソッドのシグネチャとドキュメンテーションをよく見てください。単なる、replace(...)という呼び出しはありえません。2問目については、ご質問の意味がよく分かりませんし、質問に付随するコードも理解できません。次の機会には、要求をわかりやすく説明してください。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

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 --------------------------------------

upstartdec
質問者

補足

_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の値を設定するには?*/ } よろしくお願いします。