• ベストアンサー

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

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

  • Java
  • 回答数7
  • ありがとう数10

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

  • ベストアンサー
  • 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

  • 特定の文字列を抜き出す。

    javaでrdfファイルへのURLを抜き出そうと思っています。 具体的にはhttp:からindex.rdfという文字列を 抜き出したいのですが、 String型のlineという変数に a.(http:*************index.rdf)だけ含まれている文字列と b(http:*********foaf.rdf ***************** http:***************index.rdf) のような含まれ方をしている文字列があります。 aの場合はsubstringメソッドを使って httpの現れる場所からindex.rdfが現れる場所をindexOfメソッドで求めて抜き出せばよいのですが、 bの場合最初のhttpから最後のindex.rdfまで読み出されます。 index.rdfのついたhttpから文字列を抜き出す方法は ないでしょうか?お願いします。

    • ベストアンサー
    • Java
  • 文字列を取り出す。

    文字列で一行の中に ********* ******** *********** ********* のように間に空白の入っている文字列が あるのですが、 これの2番目をとってくるようにしたのですが、 良い方法が思い浮かびません。 Stringクラスのメソッドを見ているのですが、、、 お願いします。

    • ベストアンサー
    • Java
  • 文字列の検索

    教えてください。 例えば、「今日は、良い天気です。」と言う文字列が あったとします。 その文字列のなかに、「天気」と言う言葉が含まれて いるかどうかのチェックをしたいのですが、どのように すれば、よいでしょうか? がんばって考えてみたのですが、Stringクラスの indexOf(\"天気\")のようにして、マイナス(-1)が 返ってくれば、天気と言う文字が含まれていると 言うやり方でいいのでしょうか? あってるのかどうか、わからなくて困ってます。 他のやり方でされてる方がいらっしゃれば、ご教示 ください。お願いします。

    • ベストアンサー
    • Java
  • 文字列を削除したい。

    Stringの文字列をStringに移し特定の 文字を消したいと思っています。 調べたところdeleteというメソッドで。 開始位置と終了位置を指定すれば 削除できるみたいですが、 文字列を指定してその文字列を削除する、 という事はできますか? お願いします。

    • ベストアンサー
    • Java
  • String文字列の解析の方法(初歩的ですみません

    皆様、はじめまして。sakiと申します。 javaを習い始めて2週間の初心者です。 今回はどうしてもわからな問題があり、質問することに致しました。 どうぞよろしくお願いします。以下、問題です。 String文字配列のaaa[SAKI]and[DOG]like[DOG=5]love[SAKI=-20]を左からj順に解析していく。 [ ]で囲まれていない文字列はString文字列として返す。 [ ]が現れた場合は、中身が"SAKI"の場合は、String型文字列"SAKI"を返す。 [ ]の中身が"DOG"の場合は、String型文字列"DOG"を返す。 また[ ]の中に=がある場合は=の後ろの数字をint型で返す。 という処理がわかりません。 for文とcharAt()メソッドで1文字ずつ抜き出し、それをchar型配列に格納し、さらにString型に変換して判別するという方法を考えたのですが上手くいきませんでした。 ご親切な方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • 文字列の動的な結合

    C♯、.net frameworkdは2.0の環境です。 メソッドでSQL用の文字列を作っています。 引数によって、JOINするテーブルを変えたいのですが、StringBuilderではなく、 単なるStringの変数を、ひたすら + で結合している状態なので、悩んでいます。 String sql; sql = " select " + " tbl.column1 " + " from " + … こんな感じです。 StringBuilderで作り直したいのですが、諸事情により難しいので、+での文字列結合をしつつ、 ところどころ、引数を見て文字列を結合したりしなかったり…ということをスムーズにできる 方法はないでしょうか?

  • 文字列を特定文字で分割したい

    はじめまして。宜しくお願いします。 現在Access2002のVBAをつかってタイトルのようなことを実現したいと思っています。 Dim a As String Dim b As String という二つの変数を用意して 「C:\Documents and Settings\デスクトップ\test.csv」という文字列が与えられているとき 変数aには「test.csv」を、変数bには「C:\Documents and Settings\デスクトップ\」を 格納しようとしています。 スマートなやり方がわからず、 文字列の右から一文字ずつ比較して行き、何文字目に「¥」が出てくるかをカウントして、right関数とleft関数で分割を行っています。 このような処理を行う場合、なにか適した関数があると思い探しているのですが、 なかなか見つからず、行き詰っています。(そのような関数があるのかも分からず・・) もしもなにかお気づきの方が居られましたら、ご教授宜しくお願いします。

  • コマンドラインの文字列を違うメソッドに渡す。

    コマンドラインに入力された文字列を同じクラス内の 違うメソッドから利用したいのですが、 mainでは method(args[]); method側では、 method(String args[]) としていますが、エラーがでます。 javac hoge.java hinshiExtract.java:149: '.class' がありません。 countTango(args[]); ^ hinshiExtract.java:149: ')' がありません。 countTango(args[]); お願いします。 ^

    • ベストアンサー
    • Java
  • 配列内の文字列検索をしたい

    お世話になっております、またjavascriptで詰まってしました。現在作ってるソースは以下のイメージです。 var temp= hensuu; var list = "aa,bb,cc"; //tempがaa,bb,ccの文字を含んでいたら処理 if(list.indexOf(temp)!=-1){ //ここで何番目の要素か知りたい } という処理をしているのですがif(list.indexOf(temp)!=-1)の中で「文字列(list)に存在する」だけでなく,「区切りの何番目の要素か」も知りたいんですがそういう便利な関数か方法はあるでしょうか? list.indexOf(temp)の返す値は「文字列が見つかった場所」なのでリストの順番ではないんですよね…。 for文でひとつひとつ回すしか方法は無いのでしょうか??LIST(もしくは配列)内検索関数みたいなのがあればナイスなんですが…。分かる方、ご教授頂けたらこれ幸いです。

  • javaというか文字列について少し質問です><

    javaというか文字列について少し質問です>< javaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java

専門家に質問してみよう