• 締切済み

行単位の文字列処理

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

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

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

関連するQ&A

  • 文字列の置換

    JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){  h_s = h_br.readLine();  if (h_s == null){   break;  }  ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルから文字列を読み込み!!

     Java初心者です。よろしくお願いします。 テキストファイルから文書を読み込み、その文章の中のある単語を検索するにはどうすればよいのでしょうか? BufferedReader br = new BufferedReader(new FileReader("test1.txt")); で読み込みをさせているのですが、読み込んだ後、その文章の中の単語(文字列)を検索し、それを何かに出力したいと考えています。 どなたかアドバイスをください!!よろしくお願いします!!

  • javaでの文字列からの数字抽出

    文字列内の数字だけを取り出したいとおもっています。 たとえばファイル内からreadline()で読み込んだ文字列が [0, 0] [-0.34063, 0.0756989] [-0.362579, 0.118652] [-0.36264, 0.118637] だったならば 配列内に {0,0,-0.34063,0.0756989,-0.362579,0.118652,-0.36264,0.118637 } のように格納したいのですが可能なんでしょうか? "["や空白のようなものを削除して数字だけを取り出したいのです。 現在はこのようにファイルの文字列を取得しています FileReader fr = new FileReader(inputpath); BufferedReader br = new BufferedReader(fr); String read = br.readLine(); よろしくお願いします。

    • ベストアンサー
    • Java
  • javaで大量のファイルを読み込む方法

    javaプログラミングについて質問です。 例えば、a1.txt~a100.txtの100個のテキストファイルがある として、これをループか何かを使って順番に読み込みたいのですが、 そのような方法はあるのでしょうか。 // ファイル入力ストリームを取得 BufferedReader br = new BufferedReader(new FileReader("a1.txt")); BufferedReader br2 = new BufferedReader(new FileReader("a2.txt")); BufferedReader br3 = new BufferedReader(new FileReader("a3.txt")); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ BufferedReader br100 = new BufferedReader(new FileReader("a100.txt")); という風に書くのが面倒に思っています。 宜しくお願いします。

    • ベストアンサー
    • Java
  • オープンしたファイルで行の連結

    はじめまして、言語に疎いもので質問させて頂きます。 次のようなsample.txtというファイルがあります。 【sample.txt】 ABC #1行目 <タブ>DEF #2行目 行頭にタブ <タブ>GHI #3行目 行頭にタブ JKL #4行目 <タブ>MNO #5行目 行頭にタブ PQR #6行目 <タブ>STU #7行目 行頭にタブ <タブ>VWX #8行目 行頭にタブ (・・・以下上記のような2、3行のブロックパターンがランダムで続く) 1~3行目を1ブロック、また4~5行目、6~8行目を一部ロックとして 半角スペースを間に挟んで一行に連結し、下のように別ファイルに出力したいと考えております。 【output.txt】 ABC DEF GHI JKL MNO PQR STU VWX ファイル自体は次のようにopen関数で開き、一行ずつ読み込んでいますが、現在の行を読みつつ、 次の行の内容をどうしたら読むことができるかわかりません。 また行の連結はどのように行えばよいでしょうか。 2、3行のブロックパターンがランダムで続くため、次の行の先頭にタブがあれば連結するという 処理も加えたいと考えております。 open(IN, $sample.txt); while (<IN>) {    $line = <IN>; } 質問内容もわかり辛いかと思いますがご教授頂けますでしょうか。

    • ベストアンサー
    • Perl
  • 10行単位の文字列をランダムに表示するには

    10行単位になっている文字群をランダムに表示したいのですが。 たとえば、文字列や数字の列、スクリプトなどが、10行単位でdata.txtに入っています。 ランダムに、その文字列を10行単位で表示する方法です。 こんな形で、呼び出し行を入れてブラウザに表示したいです。 <?php require("data.txt"); ?> 具体例でいいますと、強大なサイトを数名で作っていて、それぞれのアカウントのアドワース広告をランダムに表示したいなどという場合です。 ひとかたまり10行の広告が7つあれば、70行です。 それをランダムに10行単位で呼び出せば可能かと思うのですが。 バナーやテキストのランダム広告はたくさんありますが、今回のようなものは探してもないので、教えていただけるとありがたいです。 もちろんもっといい方法があれば歓迎です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • VBSで文字列の置換

    VBSまったくの初心者で、「そんなもんWebで調べろ」とお叱りを受けるのを承知でお聞きします。 C:¥置換¥あああ.txt のテキストファイル内にある文字列"ABC"を"DEF"に置換するVBSはどのように記述すればよいでしょうか?。 よろしくお願いいたします。

  • 秀丸エディタで文字列の置換をしたい

    秀丸エディタの正規表現についてお教えください。 やりたいこと: 対象の文字列を含んでいない行を削除したい 例:defのみを削除したい abc def def abc ↓ abc abc どのようにすれば実現できますでしょうか? よろしくお願いします。

  • ページ処理

    JSPの、通信教育を受けていますが、タブ区切りの商品テキストを読み込み、5点づつ表示させる。 下記のJSPに、 [ ○件中の○-○件の表示 ] [ 前へ / 1 2 3 4 5 / 次へ ] というページ処理をさせたいのですが、うまくいきません。通信教育は、受講料が安いせいか、質問しても「ループを使い読み飛ばせ」ぐらいの回答しか得られず困っています。どなた様かご教授願えないでしょうか。 <th>商品</th><th>商品名</th><th>現在価格</th><th>入札</th><th>締切日</th></tr> String tmpStr; StringTokenizer tkn; FileReader fr = new FileReader(application.getRealPath("data.txt")); BufferedReader br = new BufferedReader(fr); DecimalFormat df; df = new DecimalFormat("###,###"); while(br.ready()){ tmpStr = br.readLine(); out.println("<tr style='background:#ffffcc'>"); tkn = new StringTokenizer(tmpStr,"\t"); byte i; i=0; String strTmp; while(tkn.hasMoreTokens()){ strTmp = tkn.nextToken(); switch(i){ case 0: case 4: out.println("<td algin='right'>" + strTmp +"</td>"); break; case 1: out.println("<td>" + strTmp + "</td>"); break; default: out.println("<td align='right'>" +df.format(Long.parseLong(strTmp)) +"</td>"); } i++; } out.println("</tr>"); } br.close(); %> </table> </body> </html> お願いします。

  • perlでのcsv形式のテキストファイルの変換

    perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。 【変換前】 10, abc , def , ghi ,jkl    ----1行目 10, abc , def , aaa, bbb   ----2行目 10, abc , def , ccc , ddd  ----3行目 11, abc , def , eee , fff   ----4行目 11, abc , def , aaa , ggg ----5行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 【変換後】 10, abc , def , ghi ,jkl    ----1行目 11, abc , def , eee , fff   ----4行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が 前の行の先頭3列と同じならその行は出力しない、といった 変換をしたいと思っております。 (例えば2行目ですと先頭3列は10, abc ,defになっており、  1行目の先頭3列と同じ文字列になっているためこの行は出力しない) 当方、Perl初心者で上記のようなことがPerlでできるかも よくわかっておりません。 そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら どのようにPerlで記述すればできるのか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう