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

このQ&Aに関連する最新のQ&A

A 回答 (9件)

何度もすみません。


改良しました。

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;
}
    • good
    • 0

以下のページに文字列置換そのものがあります。


http://park.ruru.ne.jp/ando/work/who/doc/jp_ne_r …

誰にもわからないJava講座http://park.ruru.ne.jp/ando/work/who/html/index. …

文字列操作
のとこですね。
(楽しく笑えて高度なことも書いててわかりやすくてお勧めです)

で、staticのことですが、
「static を付けると、オブジェクトを作らなくてもそのメソッドを使える」
というのは実際そうです。

オブジェクトはnewなりなんなりで作ってあげないと、
操作できないんです。
ないものを使おうとしても無理ですよね。

でもstatic付けてると静的に配置されるので
つかえる、と。

参考URL:http://park.ruru.ne.jp/ando/work/who/html/index. …
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/04/05 09:53

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



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

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

下の、間違いです!


下の下の方が正しいです。
    • good
    • 0
この回答へのお礼

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

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

ほんっとうに申し訳ないです 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;
}
    • good
    • 0

すみません、下の、クソプログラムです。


無限ループになっちゃいます (^_^;) 。

改良しないとダメですね・・・・。
    • good
    • 0

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



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

又、使い方ですが、

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

これを実行すれば「置き換えられたら置き換え!」が出力されるハズです。
    • good
    • 0

今、即席で作ってみました。

日本語に対応しているかは分からないのですが、一応。

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=置き換える文字
    • good
    • 0

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



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

javascript にはあるのにね。

参考URL:http://www.cacas.org/~wes/java/
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコード変換(漢字)のサンプルプログラム

始めまして!
困っています、御力添えをお願いします。
UNIX(SouOS5.8)でのコード変換(SJIS→EUC、EUC→SJIS)のコーディング(サンプルソース:C言語)をどなたか教えて頂けないでしょうか?
お願いします。

Aベストアンサー

下記URL参照。

参考URL:http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

QJavaのプログラム内で、javaファイルをコンパイルしたい

タイトルの通り、javaファイルをコンパイルする
Javaアプリケーションを作りたいんです。
こういうことって、できますでしょうか…?
やり方がわかる方がいましたら教えてください。
宜しくお願いします。

Aベストアンサー

やったわけじゃないですけど、これでできるんじゃないですか?
Runtime.getRuntime().exec()

呼び出しはバッチファイルにしておいてクラスパスなどの設定も一緒に書いておけばいいでしょう。

Qまったくの初心者ですが、独学でプログラムを学びたい。

 パソコン中級者でプログラム初心者です。
 独学でプログラムを学びたいんですが、どうやったら独学で学べますか?

Aベストアンサー

一通りは自分のレベルにあった本で学習して下さい。これで基礎ができます。なんでもそうですが、基礎が大事です。全てを理解する必要はありません。あ~、こういうことがあるんだという目次を自分の頭の中につくるぐらいで良いです。全てを完全に覚えて、使いこなすなんて無理な話です。

その後、自分が作りたいと思うプログラムに挑戦して下さい。いきなりきっちりしたものを作るのではなく、簡易型のようなものと割り切ってかまいません。作成は、先に本を読んで自分の頭に作った目次から、ここを読めばできそうだというところ見つけながら開発します。欲が出てきて、ここはこうしたいと思うはずです。その時は、ネットなりで捜したり、質問したりして解決していきます。

作りながら、調べながら、上達していきます。妥協せずにがんばってみることも大事です。実現できないことでも、その理由を自分で納得することは大きな前進です。

一番の上達の早道は優秀なソースをたくさん読むことです。ソース全部ではなくても、実装に必要な部分のソースは、掲示板などに書かれていることがたくさんあります。
私も、あ~、こういう書き方があるんだって、勉強になることがありますよ。

以上、押し付けがましいようですが、がんばって下さい。

一通りは自分のレベルにあった本で学習して下さい。これで基礎ができます。なんでもそうですが、基礎が大事です。全てを理解する必要はありません。あ~、こういうことがあるんだという目次を自分の頭の中につくるぐらいで良いです。全てを完全に覚えて、使いこなすなんて無理な話です。

その後、自分が作りたいと思うプログラムに挑戦して下さい。いきなりきっちりしたものを作るのではなく、簡易型のようなものと割り切ってかまいません。作成は、先に本を読んで自分の頭に作った目次から、ここを読めばでき...続きを読む

Q特定の要素内に入力された文字列を改行
ごとに置換することはできますか?

ある要素内(div id="hoge")に入力されている文字列をセレクトボックスに置換することはできるでしょうか?

<div id="hoge">
会議室A<br />会議室B<br />会議室C<br />
</div>

上の<div id="hoge">要素を下記のように変更したいと思っております。
<br />を区分けの基準にして<br />自体は削除した形で置換できればと思います。

<div id="hoge">
<select name="room">
<option value="会議室A">会議室A</option>
<option value="会議室B">会議室B</option>
<option value="会議室C">会議室C</option>
</select>
</div>

上記のようなことは可能なのでしょうか?
可能であればご教授お願いいたします。

Aベストアンサー

とりあえずどうしてもということなので

<script>
window.onload=function(){
var hoge=document.getElementById("hoge");
var s=document.createElement("select");
s.setAttribute("name","room");
while(n=hoge.firstChild){
if(n.nodeName=="#text" && n.nodeValue!=="\n"){
var o=document.createElement("option");
o.setAttribute("value",n.nodeValue);
o.appendChild(document.createTextNode(n.nodeValue));
s.appendChild(o);
}
hoge.removeChild(n);
}
hoge.appendChild(s);
}
</script>
<div id="hoge">
会議室A<br />会議室B<br />会議室C<br />
</div>

とりあえずどうしてもということなので

<script>
window.onload=function(){
var hoge=document.getElementById("hoge");
var s=document.createElement("select");
s.setAttribute("name","room");
while(n=hoge.firstChild){
if(n.nodeName=="#text" && n.nodeValue!=="\n"){
var o=document.createElement("option");
o.setAttribute("value",n.nodeValue);
o.appendChild(document.createTextNode(n.nodeValue));
s.appendChild(o);
}
hoge.removeChild(n);
}...続きを読む

Qおすすめのプログラム開発の入門書を教えてください。

おすすめのプログラム開発の入門書を教えてください。

私はC++でWindows環境で動くパッケージソフトの開発をしています。
今までプログラマとして働いてきましたが、自ら望んでこの職種についたわけではなかったこと、元々文系でパソコンに苦手意識もあり、プログラムがあまり好きではありません。
転職を考えたりもしたのですが、プログラム開発の表面しか知らずに好きじゃないと決めつけていたことに気づき、プログラム開発というものを勉強して、プログラム開発を知り、好きになっていきたいと思っています。

言語の入門書ではなく、プログラム開発の入門書を探しています。
ネットワークやデータベースなど、専門的な部分を除き、要件定義、設計、プログラム、テストなど、プログラム開発全体の入門書はないでしょうか?

今まで受け身だった自分を変えたいと思っています。
よろしくお願いします。

Aベストアンサー

あまりソフトウェア開発に関する書籍を読んだ事がないのであれば、下記の3つ辺りがおすすめです。

■ コードコンプリート
http://www.amazon.co.jp/dp/489100455X

筆者の言うコードコンストラクション(詳細設計から結合テスト辺り)の解説書。変数の命名に関する議論からデバッグ、リファクタリング、チューニング、コメントなどまで幅広く扱っています。特定のプログラム言語に依存しない原則・技術を、非常に基礎的な部分から学べる数少ない書籍です。


■ 達人プログラマ
http://www.amazon.co.jp/dp/4894712741

要件定義からプログラミングまで幅広い話題を扱っています。具体的なコードや手法に言及している部分も有りますが、原則・心得的なことが中心です。


■ プログラムはなぜ動くのか
http://www.amazon.co.jp/dp/4822281019

コンピュータがプログラムを動かすときに起こっていることを、分かりやすく解説しています。


■ 珠玉のプログラミング
http://www.amazon.co.jp/dp/4894712369

プログラムのアルゴリズムやテクニックを分かりやすく楽しめるように紹介した読み物です。

あまりソフトウェア開発に関する書籍を読んだ事がないのであれば、下記の3つ辺りがおすすめです。

■ コードコンプリート
http://www.amazon.co.jp/dp/489100455X

筆者の言うコードコンストラクション(詳細設計から結合テスト辺り)の解説書。変数の命名に関する議論からデバッグ、リファクタリング、チューニング、コメントなどまで幅広く扱っています。特定のプログラム言語に依存しない原則・技術を、非常に基礎的な部分から学べる数少ない書籍です。


■ 達人プログラマ
http://www.amazon.co.jp/dp/489471274...続きを読む

Qメモ帳で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?

 Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?
やはりJavaのString型に近いUnicode big endianがよいのでしょうか?
それともJava側で自動認識してくれるのでしょうか?
XMLの場合は1行目でそのXMLファイルが使用している文字コードが何か宣言しますよね。
でもテキストファイルだと文字コードを宣言する場所がないみたいですし・・・(ここでの文字コードを宣言する場所としてはBOMは例外ですよ 念のため)

補足:メモ帳だとUnicode big endianで保存すると必ずBOMが付くみたいです。
メモ帳はLF改行が使えません。CR+LF改行のみ対応です。

 Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?
やはりJavaのString型に近いUnicode big endianがよいのでしょうか?
そ...続きを読む

Aベストアンサー

Windowsのメモ帳で読み書きするファイルを、Javaでも読み書きするとしたら、文字コードは何にするべきか、という質問でよろしいでしょうか。

それでしたら、文字コードは「MS932」にするのがよろしいと思います。
MS932とは、Windowsがデフォルトで使っている文字コード、いわゆる「シフトJIS」のことです。
Windows上で動くJavaプログラムは、デフォルトではMS932の文字コードでテキストファイルの読み書きを行います。
例 Reader r = new FileReader("input.txt");

Unix等のほかプラットフォームで動くJavaプログラムでしたら、
例 Reader r = new InputStreamReader(new FileInputStream("input.txt"), "MS932"));
となります。

>FireInputStreamクラスってテキストじゃなくてバイナリを読むためのクラスですよね!?このクラスでよいのでしょうか?
FireInputStreamはファイルをバイナリとして読みますが、FireInputStreamが読んだバイナリデータをInputStreamReaderが"MS932"と指定された文字コードで解釈するので、文字列データとして扱えるようになる仕組みです。

Windowsのメモ帳で読み書きするファイルを、Javaでも読み書きするとしたら、文字コードは何にするべきか、という質問でよろしいでしょうか。

それでしたら、文字コードは「MS932」にするのがよろしいと思います。
MS932とは、Windowsがデフォルトで使っている文字コード、いわゆる「シフトJIS」のことです。
Windows上で動くJavaプログラムは、デフォルトではMS932の文字コードでテキストファイルの読み書きを行います。
例 Reader r = new FileReader("input.txt");

Unix等のほかプラットフォームで動く...続きを読む

QWEBサイトを作る副業は可能ですか?

4月から社会人の男です。
お金を貯めたいので、土日祝日に家で出来る副業をしたいです。

副業に拘りはありませんが、どうせなら今まで学生のうちに培った技術を生かせたらいいなと思いました。

PHP、jQueryなどのプログラムやWEBデザインが出来ます。
アドバイスお願い致します。

Aベストアンサー

>どうせなら今まで学生のうちに培った技術を生かせたらいいなと思いました。
>PHP、jQueryなどのプログラムやWEBデザインが出来ます。
学生レベルのプログラマの知識なんて社会人レベルだと役立たない。
というかノウハウがなさ過ぎる。
まぁ定番はセキュリティー関係の処理でしょう。
PHPできます。JQueryできますって言うのはその言語だけの知識だよね?
まともなセキュリティーレベルの知識と対処法は知っているのかな?
#2の人も言っているけどそこで品質管理の問題が発生する。
動く物は作れるのは当たり前。
でも品質管理で通る物を作れるのはまた別の話。

Qjavaプログラムで他言語のプログラムを動作できるのでしょうか?

java言語を勉強しているものです。
答えが見つからないので質問させていただきます。

現在以下の2つのプログラムを作成し動作確認をしました。
1:カメラの画像を保存する
  プログラムの言語はBasicとC++が推奨されていたので、今回はBasicでプログラムを作成しました。
2:保存した画像をAppletでスライドショーにして見せる
  プログラム言語はjavaです。

理想的な動作はリアルタイムな画像を次々に見せることです。

そこで、2で作成したプログラムの中に1を動作させる機能を持たせたいのですが、実現可能でしょうか?

知っている方がいましたら、御指導をお願いいたします。

Aベストアンサー

このあたりの話でしょうか?

「どうしたら、Java プログラムから外部のコマンド(プログラム)を呼び出せますか?」
http://www.gimlay.org/~javafaq/S103.html

参考URL:http://www.gimlay.org/~javafaq/S103.html

Qこれって、動的プログラムになるんでしょうか?検索ロボットの邪魔ですか?

ホームページをGoogle等、ロボット型の検索サイトが巡回して、検索サイトに登録されていくケースがある。という話を聞いたのですが、この場合、ホームページ内に動的プログラムが挿入されている場合、CGIやJavaの事だと思うのですが(その辺は詳しくないのですが)やはり、ランキング投票用のプログラム等が挿入されているページも動的ページに含まれて、ロボット型検索サイトの巡回の障害になってしまい、ロボットに巡回してもらいたい場合、不利になるのでしょうか?
ちなみにランキング登録用のプログラムはこんな感じです。
<a href="http://www.***.jp/***/***.cgi?id=***" target="_blank"> ***</a>
たぶん、登録しているサイトのCGIにアクセス?するためのリンクのようなので問題無さそうですが、確信がもてないので、説明頂けるとありがたいです。

Aベストアンサー

この場合、迷惑を被るのはスパイダー(ロボット)のほうではなく、ランキング集計プログラムのほうかと思います。
ロボットのほうは勝手に情報収集しているのですから、どんな情報を食わされてどのような動作をしようがwebmasterは道義的責任を感じる必要すらありません。

問題はランキングサイトの集計プログラムほうです。
ロボットのアクセスはそれが本当の投票ではないので、単純に投票を全件集計していたら『カラ票』というゴミが混入してしまいます。
とはいうものの、これも実は道義的にはランキングサイト側が対策すべきです。ランキング投票の水増しや妨害しようとする輩は必ず居るわけで、ランキングサイトが信用されるためには、その精度を上げるために何かしらの対策やルールを作っているはずです。その対策をする中で、技術的により簡単なロボット対策は、ロボットの投票を好ましくないと考えているのであれば盛り込んでいると思います。

ということでまとめると『気にしなくてよい』が結論になるかと思います。

Qjavaで作るwebアプリで扱う文字コード(日本語)について

javaで作るwebアプリで扱う文字コード(日本語)について

javaで作るごく普通のwebアプリで扱う文字コード(日本語)についての質問です。
プレゼンテーション層-ビジネスロジック層の2層アーキテクチャで、データベースは
無く、ビジネスロジック層で入力ファイルを処理して結果を画面に出すというアプリです。
javaのデフォルト文字コードはUTF-8等だそうですが、例えばクライアントが
Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。
以下、2点質問です。
1.この時、EUC-JPのテキストからUTF-8への変換は、JVMが自動的にするのですか?
  Yesだったら、クライアント側はプラットフォームの種類にかかわらず、
  文字コードを意識する必要はないのでしょうか。
  Noだったら、一般的にはどこがするのですか?
2.1の答えがどちらにしても、クライアントのOSのデフォルトのコードを
  UTF-8に変更する必要は無いですよね?関連する他のアプリケーションやミドルウェア
  がUTF-8で動作するのかの検証は必要ないですよね?
  もし認識が違っておりましたら、教えて下さい。

サーブレットとか画面周りの知識が無いので、質問の仕方がおかしいところが
ありましたら、申し訳ありません。

javaで作るwebアプリで扱う文字コード(日本語)について

javaで作るごく普通のwebアプリで扱う文字コード(日本語)についての質問です。
プレゼンテーション層-ビジネスロジック層の2層アーキテクチャで、データベースは
無く、ビジネスロジック層で入力ファイルを処理して結果を画面に出すというアプリです。
javaのデフォルト文字コードはUTF-8等だそうですが、例えばクライアントが
Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。
以下、2点質問です。
1.この時、EUC-JPのテキス...続きを読む

Aベストアンサー

 Bruce Eckel, "Thinking in Java (4th Edition)" (Prentice Hall, 2006)
によると、p.922~p.923に、次のようにあります。


Java 1.1 made some significant modifications to the fundamental I/O stream library.
When you see the Reader and Writer classes, your first thought (like mine) might be that these were meant to replace the InputStream and OutputStream classes.
But that’s not the case.

Although some aspects of the original streams library are deprecated (if you use them you will receive a warning from the compiler), the InputStream and OutputStream classes still provide valuable functionality in the form of byte-oriented I/O, whereas the Reader and Writer classes provide Unicode-compliant, character-based I/O. In addition:


1. Java 1.1 added new classes into the InputStream and OutputStream hierarchy, so it’s obvious those hierarchies weren’t being replaced.

2. There are times when you must use classes from the “byte” hierarchy in combination with classes in the “character” hierarchy. To accomplish this, there are “adapter” classes:
InputStreamReader converts an InputStream to a Reader and OutputStreamWriter converts an OutputStream to a Writer.


The most important reason for the Reader and Writer hierachies is for internationalization.
The old I/O stream hierarchy supports only 8-bit byte streams and doesn't handle the 16-bit Unicode characters well.

Since Unicode is used for internationalization (and Java's native char is 16-bit Unicode), the Reader and Writer hierarchies were added to support Unicode in all I/O operations.
In addition, the new libraries are designed for faster operations than the old.


>Linuxマシンの時は、入力テキストファイルは普通、EUC-JPと思います。

私の環境ではUTF-8です。

>関連する他のアプリケーションやミドルウェア
>がUTF-8で動作するのかの検証は必要ないですよね?

あります。(レガシーなものを使う場合等)


 もっとも、こういう文字コードの問題を解決するためにUnicodeが多くの方々の多大の努力によって開発されたにも関わらず、未だにUnicodeを使わずに、単にWindowsマシンだというだけで、ShiftJISを使う人が未だにあとをたたないのは、全くはた迷惑な話で、改善していって欲しいもんです。

 Bruce Eckel, "Thinking in Java (4th Edition)" (Prentice Hall, 2006)
によると、p.922~p.923に、次のようにあります。


Java 1.1 made some significant modifications to the fundamental I/O stream library.
When you see the Reader and Writer classes, your first thought (like mine) might be that these were meant to replace the InputStream and OutputStream classes.
But that’s not the case.

Although some aspects of the original streams library are deprecated (if you use ...続きを読む


人気Q&Aランキング

おすすめ情報