• ベストアンサー

文字列の置換

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