• ベストアンサー

文字列の置換

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 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_n
  • ベストアンサー率21% (28/132)
回答No.5

何度もすみません。 改良しました。 public String replace (String s,String s2,String s3) //I don't know that this works with Japanese... { int start_number = 0; while (s.indexOf (s2,start_number) >= 0) { s = s.substring (0,s.indexOf (s2,start_number)) + s3 + s.substring (s.indexOf (s2,start_number) + s2.length (),s.length ()); start_number = s.indexOf (s2,start_number) + s3.length (); } return s; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (8)

noname#2875
noname#2875
回答No.9

以下のページに文字列置換そのものがあります。 http://park.ruru.ne.jp/ando/work/who/doc/jp_ne_ruru_park_ando_util_ANString.html#change 誰にもわからないJava講座http://park.ruru.ne.jp/ando/work/who/html/index.html の 文字列操作 のとこですね。 (楽しく笑えて高度なことも書いててわかりやすくてお勧めです) で、staticのことですが、 「static を付けると、オブジェクトを作らなくてもそのメソッドを使える」 というのは実際そうです。 オブジェクトはnewなりなんなりで作ってあげないと、 操作できないんです。 ないものを使おうとしても無理ですよね。 でもstatic付けてると静的に配置されるので つかえる、と。

参考URL:
http://park.ruru.ne.jp/ando/work/who/html/index.html
mune
質問者

お礼

ありがとうございます。 上のサイト非常にためになりそうな予感・・・ これからじっくり見てみます。

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.8

ええとですね、僕も実はよく分かってないのですが (^_^;)、 public class A { public static void main (String a) { replace ("ABC","A","-"); } //--省略 } この様にするとダメなんですよ、理由は分からないのですが(笑)。 もう、おまじないと思った方がいいんじゃないですかね。 メインエントリーポイントがどうのとかいうので、 public class A { public static void main (String a) { new A (); //これが重要らしい } public A () { //処理 replace ("ABC","A","-"); } //省略 } こうしないといけないみたいです。ちゃんと説明できなくって申し訳ないのですが、static を付けると、オブジェクトを作らなくてもそのメソッドを使える、という意味に解釈しています。僕は(笑)。 例えば、 public class A { public String abc () { return "abc"; } } をいきなり A.abc (); と呼び出しても動いてくれませんが、 public class A { public static String abc () { return "abc"; } } は、A.abc (); で動いてくれます。 ん~、僕もよく分かってないので、おかしな返答になっています。すみません。この辺のコアな所は本などでお調べになった方が無難かと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.7

下の、間違いです! 下の下の方が正しいです。

mune
質問者

お礼

ありがとうございます。できました!ただ・・ static でない メソッド replace(java.lang.String,java.lang.String ,java.lang.String) を static コンテキストから参照することはできません。 コンパイル時に↑といったエラーがでたので public static String replace(String s,String s2,String s3) ↑のようにstaticを適当に追加したら動いたのですが、これってどういう意味なのでしょうか? 元々の質問からそれてごめんなさい・・・

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.6

ほんっとうに申し訳ないです m(v_v)m 今度こそ・・・・ public String replace (String s,String s2,String s3) //I don't know that this works with Japanese... { int start_number = 0; while (s.indexOf (s2,start_number) >= 0) { s = (s.substring (0,s.indexOf (s2,start_number)) + s3 + s.substring (s.indexOf (s2,start_number) + s2.length (),s.length ())); start_number = s.indexOf (s2,start_number) + s3.length () - 1; } return s; }

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.4

すみません、下の、クソプログラムです。 無限ループになっちゃいます (^_^;) 。 改良しないとダメですね・・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.3

下のアドバイスに追加です。 「文字」となっている所は「文字列」と解釈されてかまいません。 それでも動作します。 又、使い方ですが、 s = replace ("置き換え!","き","きかえられたら置き"); System.out.println (s); これを実行すれば「置き換えられたら置き換え!」が出力されるハズです。

全文を見る
すると、全ての回答が全文表示されます。
  • t_n
  • ベストアンサー率21% (28/132)
回答No.2

今、即席で作ってみました。日本語に対応しているかは分からないのですが、一応。 public String replace (String s,String s2,String s3) //I don't know that this work with Japanese... { while (s.indexOf (s2) >= 0) { s = s.substring (0,s.indexOf (s2)) + s3 + s.substring (s.indexOf (s2) + s2.length (),s.length ()); } return s; } //s = テキスト s2=検索する文字 s3=置き換える文字

全文を見る
すると、全ての回答が全文表示されます。
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

Java は良く知らないのですが、正規表現って無いみたいですね。 ただ、正規表現を扱うパッケージは探せばあるみたい。 例えば GNU だったら、参照URLのところに。 javascript にはあるのにね。

参考URL:
http://www.cacas.org/~wes/java/
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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
  • jspでファイルの読み込み

    jspでwebサーバーにある“1.txt”ファイルを読み込んでそれを表示するプログラムを作成したのですが、エラーが出てしまいます。サーバーの環境(jsp実行環境等)は問題ありません。以下のコードで何かおかしなところがありましたら教えてください。 <%@ page contentType="text/html" import="java.util.*,java.io.*" %> <% String result = ""; String h_s = ""; FileReader h_fr = new FileReader("1.txt"); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } result = result + h_s; } %> <%= result %>

    • ベストアンサー
    • Java
  • 行単位の文字列処理

    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初心者ですが、ファイル入力を行うプログラムを実行 すると、エラーが出ますが、そのエラーの原因が まったく見当がつきません。 誰か教えてください。 ------------読み込みデータ(loc.dat) 2 11 1 4 1 5 7 1 3 7 7 2 12 11 1 4 1 11 12 4 1 5 3 1 1 11 13 4 1 5 2 1 -------------プログラム import java.io.*; class ExReader {   public static void main(String[] args) { try { //読み込みファイル指定 FileReader fr = new FileReader("loc.dat"); BufferedReader br = new BufferedReader(fr); //ファイルから1行ずつ読み込む String s; while ((s = br.readLine()) != null) { System.out.println(s); } //読み込みファイルをクローズする br.close(); } catch (Exception e) { System.out.println("err: "+e); System.exit(1); } } } ---------------コンパイル結果 C:\JAVA\sim>javac ExReader.java ExReader.java:7: シンボルを解決できません。 シンボル: コンストラクタ FileReader (java.lang.String) 場所 : FileReader の クラス FileReader fr = new FileReader("loc.dat"); ^ ExReader.java:8: シンボルを解決できません。 シンボル: コンストラクタ BufferedReader (FileReader) 場所 : java.io.BufferedReader の クラス BufferedReader br = new BufferedReader(fr); ^ エラー 2 個

    • ベストアンサー
    • Java
  • はじめまして。よろしくお願いいたします。

    はじめまして。よろしくお願いいたします。 java初心者です。 javaでファイルを読み込み、1行ずつ処理して別プログラムに出力するプログラムを作成しています。 ----サンプルソースコード import java.io.*; class testReader { public static void main(String[] args) { FileReader fr = new FileReader("test.txt"); BufferedReader br = new BufferedReader(fr); while (true) { String readLine = br.readLine(); : : ----サンプルソースコード 上記のような感じで処理を進めるのですが、1点問題にぶつかりました。 readLineで読み込んだ行にタブ文字がある場合、タブ文字が消えてしまいます。 読み込むテキストファイルはShift-JISで保存されています。 なにか回避策はございませんでしょうか。 よろしくお願いいたします。

  • ファイルから正しい文字が読み取れない

    こんにちは いつもこちらでお世話になっています。 テキストファイルからすべての文字列を読み込んで フレーム上のtextAreaに読み込んだ文字列を書き込みたいのですが 文字化けしてしまって、正しく表示されません。 どなたか、正しく表示する方法を教えていただけないでしょうか。 よろしくおねがいします。 ちなみに、テキストボックスのパスとファイル名は(c:/test.txt)です。 ================================================= import java.awt.*; import javax.swing.*; import java.io.*; class labeltest { public static void main(String args[]) { JFrame frame=new JFrame("test"); JPanel panel=new JPanel(); JTextArea ta=new JTextArea(20,30); String buff; ta.setLineWrap(true); panel.add(ta); Container ct=frame.getContentPane(); ct.add(panel); try { FileReader fr=new FileReader("c:/test.txt"); BufferedReader br=new BufferedReader(fr); while((buff=br.readLine())!=null) { ta.append(buff); JOptionPane.showMessageDialog(null,buff,"", JOptionPane.PLAIN_MESSAGE); } br.close(); fr.close(); } catch(FileNotFoundException e) { JOptionPane.showMessageDialog(null, "見つからない","失敗",JOptionPane.PLAIN_MESSAGE); } catch(IOException e) { JOptionPane.showMessageDialog(null,"読めない","失敗" ,JOptionPane.PLAIN_MESSAGE); } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • ファイルの読み込み

    "DataFile"に何行か文字列がはいっており、下のソースでそれをテキストボックスにすべて出力したいのですが、1行しか読まれません。 やり方を教えてください。 String moji = null; FileRead(){   try {     BufferedReader br = new BufferedReader( new FileReader( "DataFile.txt" ) );     while ((moji = br.readLine()) != null){       taList.setText(moji);     }     br.close();   }   catch ( Exception e ) {     System.out.println( e.getMessage() );   } }

    • ベストアンサー
    • Java
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

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

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

  • 文字列について

    適当な文字列をキーボードから入力し、次に別の適当な整数numをキーボードから入力する。次に先に入力した文字列のnum番目からnum個の文字だけ逆順になるように文字列を並び替えた文字列を新たな文字列変数に代入し、その結果を画面に出力するプログラムを下記で作成したのですが、文字列時代が逆になってしまいます。どうしたら、 結果    文字列を入力      My name is Taro Sandai.    整数を入力     10    My name isdnaS oraT になるのですか? import java.io.*; class mojiretu4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("整数を入力"); String str2 = br.readLine(); int num = Integer.parseInt(str2); StringBuffer sb = new StringBuffer(str1); sb.reverse(); System.out.println(sb);

    • ベストアンサー
    • Java
印刷品質について
このQ&Aのポイント
  • 印刷時の色調設定に問題があります
  • プロパティの設定が簡易的で原画の色に印刷できません
  • お使いの環境はWindows10で無線LAN接続です
回答を見る

専門家に質問してみよう