• ベストアンサー

一行に特定の文字列がいくつあるかを調べたい。

のですが、悩んでいます。 String型に入っている文字列の中に 例えば"日本"という文字列が何個入っているかを しらべたいのですが、Stringクラスのメソッド をみたのですが、indexOfくらいしか思いつきません。 しかしindexOfでは、その文字列が格納してある 場所を返すだけなので、できません。 何か良い方法はないでしょうか?

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.6

>ファイルの中で特定の部分(行)に追加する >方法がわかりません。  ファイルは追加モードにするのではなく、新しく作って、置き換えた方がいいと思います。  単語帳は改行で区切られていて、追加する場合は単語の後ろにカンマ、カウンタ数と仮定しています。 String source;←これが元文書とする try {  File tangochou = new File("なんとか、かんとか");←これが単語帳ファイル  File tempFile = File.createTempFile("tango", null);←新しく作るTempファイル  BufferedReader br = new BufferedReader(new FileReader(tangochou));  BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));  String tango;  while ((tango = br.readLine()) != null) {   #1さんや#3さんの方法でcountを取得する。   bw.write(tango + "," + Integer.toString(count));  }  br.close();  bw.close();  tangochou.delete();←古いファイルを消して、  tempFile.renameTo(tangochou);←Tempファイルと置き換える。 } catch (IOException ex) {  エラー処理 }

Judau_MSZ-010
質問者

お礼

ありがとうございます。

その他の回答 (6)

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.7

 すいません。 bw.write(tango + "," + Integer.toString(count)); bw.newLine();  ↑ これを忘れてました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>でてきた数字をすでにある単語がリストしてある >ファイルがあるのですが、そこに追加する方法 >を知りたいです。 >ファイルの中で特定の部分(行)に追加する >方法がわかりません。 特定の部分ってやつには、位置づけできないといけないし、そうすると、位置づけ情報もいるし、また、不定長レコードだとさらに、レコード長もいるしで、ファイルをそういう目的で使うのは、使いにくいと思います。いっそ、DBにした方が楽かもしれません。 そこまで必要ないなら、 最初にファイルから読み込んで、 onメモリで、処理して、 処理が終わったらファイルに書き出すような感じでどうでしょうか

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.4

StringBufferを使いました。参考にしてください。 public class CountTestString { public static void main(String[] args) { int count=0,i=0; StringBuffer origin=new StringBuffer("abc日本123日本123abc123日本"); String part=new String("日本"); for(i=0;i<origin.length()-1;i++){ if(origin.substring(i,(i+part.length())).equals(part)){ count++; } } System.out.println("count=="+count); } }

Judau_MSZ-010
質問者

お礼

ありがとうございます。 このプログラムの if(origin.substring(i,(i+part.length())).equals(part)) ってどういう意味ですか? その上のfor文はとりあえずiを文字列の長さまで 増やしていっているという事はわかりました。 お願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

こんなのはどうでしょう class sample { public static void main(String[] args){ String testString = "アメリカUSA日本JAPAN日本ENGLAND日本CHINA"; String wkString = testString.replaceAll("日本",""); int count = (testString.length() - wkString.length())/"日本".length(); System.out.println(count); } }

Judau_MSZ-010
質問者

お礼

ありがとうございます。

Judau_MSZ-010
質問者

補足

でてきた数字をすでにある単語がリストしてある ファイルがあるのですが、そこに追加する方法 を知りたいです。 ファイルを追加モードで書き込むのは、 FileWriterのコンストラクタの第二引数に trueを指定するのは知っていますが、 ファイルの中で特定の部分(行)に追加する 方法がわかりません。 お願いします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

class Test { public static void main ( String[] args ) { String search = "日本あいうえおあいうえお日本"; int index = -1; int cnt = 0; while ( true ) { if ( (index = search.indexOf("日本",index+1)) != -1 ) { cnt ++; } else { break; } } System.out.println ( "日本は" + cnt + "個みつかりました" ); } } ============================== 簡単に作ってみました。 他に方法があるかもしれませんが 参考にどうぞ

Judau_MSZ-010
質問者

お礼

ありがとうございます。

Judau_MSZ-010
質問者

補足

ありがとうございます。 でてきた数字をすでにある単語がリストしてある ファイルがあるのですが、そこに追加する方法 を知りたいです。 ファイルを追加モードで書き込むのは、 FileWriterのコンストラクタの第二引数に trueを指定するのは知っていますが、 ファイルの中で特定の部分(行)に追加する 方法がわかりません。 お願いします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんばんは。 indexOf("日本",0)で検索後、 見つからなければ-1が返って来るので その値を見て-1以外だったらカウント用の 変数を+1し、更に 返ってきた値を使い、indexOf("日本",返り置+1) で、最初に見つかった時点より先のインデックス より検索を行うという感じに繰り返し処理したら いかがでしょうか。

Judau_MSZ-010
質問者

お礼

ありがとうございます。

Judau_MSZ-010
質問者

補足

でてきた数字をすでにある単語がリストしてある ファイルがあるのですが、そこに追加する方法 を知りたいです。 ファイルを追加モードで書き込むのは、 FileWriterのコンストラクタの第二引数に trueを指定するのは知っていますが、 ファイルの中で特定の部分(行)に追加する 方法がわかりません。 お願いします。

関連するQ&A