• ベストアンサー
  • 困ってます

文字列の置換

  • 質問No.59679
  • 閲覧数657
  • ありがとう数8
  • 回答数9

お礼率 13% (21/151)

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

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

  • 回答No.5
  • ベストアンサー

ベストアンサー率 21% (28/132)

何度もすみません。
改良しました。

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

  • 回答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付けてると静的に配置されるので
つかえる、と。
お礼コメント
mune

お礼率 13% (21/151)

ありがとうございます。
上のサイト非常にためになりそうな予感・・・
これからじっくり見てみます。
投稿日時:2001/04/05 09:53
  • 回答No.8

ベストアンサー率 21% (28/132)

ええとですね、僕も実はよく分かってないのですが (^_^;)、

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 (); で動いてくれます。

ん~、僕もよく分かってないので、おかしな返答になっています。すみません。この辺のコアな所は本などでお調べになった方が無難かと思います。
  • 回答No.7

ベストアンサー率 21% (28/132)

下の、間違いです!
下の下の方が正しいです。
お礼コメント
mune

お礼率 13% (21/151)

ありがとうございます。できました!ただ・・

static でない メソッド replace(java.lang.String,java.lang.String
,java.lang.String) を static コンテキストから参照することはできません。

コンパイル時に↑といったエラーがでたので

public static String replace(String s,String s2,String s3)
↑のようにstaticを適当に追加したら動いたのですが、これってどういう意味なのでしょうか?
元々の質問からそれてごめんなさい・・・
投稿日時:2001/04/04 18:02
  • 回答No.6

ベストアンサー率 21% (28/132)

ほんっとうに申し訳ないです 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;
}
  • 回答No.4

ベストアンサー率 21% (28/132)

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

改良しないとダメですね・・・・。
  • 回答No.3

ベストアンサー率 21% (28/132)

下のアドバイスに追加です。

「文字」となっている所は「文字列」と解釈されてかまいません。
それでも動作します。

又、使い方ですが、

s = replace ("置き換え!","き","きかえられたら置き");
System.out.println (s);

これを実行すれば「置き換えられたら置き換え!」が出力されるハズです。
  • 回答No.2

ベストアンサー率 21% (28/132)

今、即席で作ってみました。日本語に対応しているかは分からないのですが、一応。

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=置き換える文字
  • 回答No.1

ベストアンサー率 50% (1122/2211)

Java は良く知らないのですが、正規表現って無いみたいですね。

ただ、正規表現を扱うパッケージは探せばあるみたい。
例えば GNU だったら、参照URLのところに。

javascript にはあるのにね。
関連するQ&A

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

ピックアップ

ページ先頭へ