• 締切
  • すぐに回答を!

行単位の文字列処理

  • 質問No.3696396
  • 閲覧数191
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 2% (1/37)

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

  • 回答No.2

ベストアンサー率 58% (126/214)

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

ベストアンサー率 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
--------------------------------------
補足コメント
upstartdec

お礼率 2% (1/37)

_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の値を設定するには?*/

}

よろしくお願いします。
投稿日時:2008/01/20 18:40
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ