2017-11-25 15 views
-1

テキストファイルから検索語の行番号を出力するプログラムを書いています。どんな助けでも大歓迎です。出力行数検索ワード数

while (index >= 0) { 
     index = fileText.indexOf(searchWord, index + 1); 
     indexOfSearch.add(index); 
    } 
    System.out.println(fileText);//print the text from file 
    for (int j = 0; j < indexOfSearch.size() - 1; j++) {//each index of search word 
     String spaces = "";//spaces to caret 
     int indexTo = 0;//how many spaces will be added 
     if(j < 1){ 
     indexTo = indexOfSearch.get(j);//the first index 
     }else{    
      indexTo = (indexOfSearch.get(j) - indexOfSearch.get(j - 1) - 1);//all other indexes in the row 
     }    
     for (int i = 0; i < indexTo; i++) {//add appropriate number of spaces to word 
      spaces += " ";//add a space 
     } 
     System.out.print(spaces + "^");//print the spaces and spaces 
    } 
    System.out.println("");//used to make the print slightly easier to look at. 
} 

}

答えて

1

うまくいけばこれはあなたの方法であなたを助けます。私はあなたが読んだ行ごとに呼び出すことができるクラスを作りました。

これはあなたの現在のコードに簡単に接続することができます。あなたがそれを統合するための助けを必要とするならば、私は助けてくれるだけではありません。

私はコメントのステップごとに一歩ずつそれを打ち破った。

public class FindWord { 

    public static void main(String[] args) { 

     FindWord f = new FindWord(); 

     f.findWords("As you can test, we can put as many test in test as we test", "test"); 
    } 


    public void findWords(String str, String search) {//This can easily be added into your project 

     String fileText = str;//text from file 
     String searchWord = search;//the word being searched 
     List<Integer> indexOfSearch = new ArrayList<>(); 
     int index = fileText.indexOf(searchWord); 
     indexOfSearch.add(index); 
     while (index >= 0) { 
      index = fileText.indexOf(searchWord, index + 1); 
      indexOfSearch.add(index); 
     } 
     System.out.println(fileText);//print the text from file 
     for (int j = 0; j < indexOfSearch.size() - 1; j++) {//each index of search word 
      String spaces = "";//spaces to caret 
      int indexTo = 0;//how many spaces will be added 
      if(j < 1){ 
      indexTo = indexOfSearch.get(j);//the first index 
      }else{    
       indexTo = (indexOfSearch.get(j) - indexOfSearch.get(j - 1) - 1);//all other indexes in the row 
      }    
      for (int i = 0; i < indexTo; i++) {//add appropriate number of spaces to word 
       spaces += " ";//add a space 
      } 
      System.out.print(spaces + "^");//print the spaces and spaces 
     } 
     System.out.println("");//used to make the print slightly easier to look at. 
    } 

} 

どのように動作するかを示すために検索されている複数の単語で文字列を作成しました。

私が逃した要件がある場合は、私に知らせてください。私はそれに応じて修正します。

こちらがお役に立てば幸いです。

編集:私は一緒にすべてを入れて、全体のソースはここで見つけることができます更新要件が含ま:

SO_AustinProject

+0

あなたのクラスは私のプログラムの編集を可能にするのに役立ちましたが、質問を編集しました。あなたのコードを実装した後、ファイルに1行のテキストがある場合にのみ、キャレットを整列させることができます。私はキャレットが複数のテキスト行に揃うようにしたいと思います。 – Austin

+0

"line"変数と "searchWord"変数をメソッドに渡したいとします。私の答えを編集してあなたのクラスと私のクラスが一緒に働くようにしたいなら、私はできます。 – SynchroDynamic

+0

私はもっと簡単です。私は完成時にそれをギブスに入れることができます。私は今夜​​後にそれをやらなければならないだろう。それは大丈夫でしょうか? – SynchroDynamic

0

ここでの問題は、固定幅フォントで、あなたが文字をカウントすることで、何かの場所を予測することができるということです。ほとんどのフォントは「可変」です。例えば、 'lllll'は '0000'よりも狭い。基本的にフォントをコントロールしてCourier(google 'fixed width fonts')を使うとスペースを使ってキャレットを見つけることができますが、固定フォント以外のフォントは基本的に不可能です。

+0

私の思考、あなたがコードから伝えることができるかもしれないように、インデックスを見つけることでした任意の行の検索語の最初の文字。私はそれを行うことができます。今、私の考えは、インデックスの値を保持するintで^を下に移動することでした。これは私が苦労していたところです。 – Austin

+0

私は完全に混乱していると思います。あなたは、あなたが既に知っている価値に基づいて複数のキャレットを書くように思えますか?だから何がうまくいかないの?文字列が見つかった場所のインデックスである空白の数を書いて、次に1つのキャレットを書くだけではないでしょうか?何が間違っているのですか? –

+0

はい、これを書く方法がわかりません。単語が各行に複数回表示されている場合は、複数のキャレットが必要です。 – Austin