2017-12-08 9 views
2

現在、私はファイルを持っています。私が探しているテキストのすべての行を検索するコマンドを作ろうとしています。 「テキストは、私が「猫」を検索した場合、それは「ボブは猫を持っている」プリントアウトされます。この文字列内の部分文字列のすべてのインスタンスを印刷する方法

Bob has a cat 
Bob has a dog 
Chris has a cat 

のように見えます

public class finder 
{ 
    public static void main(String args[]) throws FileNotFoundException 
    { 
     Scanner console = new Scanner (System.in); 

     String search = console.nextLine(); 
     Scanner s = new Scanner(new File("C:\\Users\\xxxxx\\Desktop\\test.txt")); 

     while (s.hasNextLine()) 
     { 
     String temp = s.nextLine(); 
     if (temp.contains(search)) 
     { 
      System.out.println(temp); 
     } 
     } 
    } //Main 

} //Finder 

、および:ここでは

は、私がこれまで持っているものですクリスは猫を持っています "。 "Bob"を検索すると、 "Bob have cat"と "Bob have dog"が印刷されます。

私はwhileループに何を入れるべきか分かりません。私はあなたがindexOf文字列コマンドで何かをしなければならないことを知っていますが、私はそれをどのように実装するか分かりません。

+0

なぜindexOfが必要ですか?単語境界に気にしない場合は、string.containsを実行することもできます。 –

+0

また、スキャンしたファイルの内容の前に空白行を入れてもよろしいですか? –

+1

したがって、各行にループして、指定された単語を含む行を出力してください。 – prsvr

答えて

0

あなただけちょうどあなたが望むものをフィルタリングするために与えられたStringライン上containsを呼び出す行全体を一致させたい場合は:

印刷します
import java.util.Arrays; 
import java.util.List; 

public class TestSearch { 
    public static void main(String[] args) { 
     String query = "chris"; 
     List<String> dataList = Arrays.asList("Bob has a cat", "Bob has a dog", "Chris has a cat"); 
     dataList.stream().filter(str -> str.toLowerCase().contains(query)).forEach(System.out::println); 
    } 
} 

Chris has a cat 

をあなたが何かをしたい場合指定された行でクエリの一致のすべてのインデックスを取得するのと同じように、より綿密に、PatternMatcherpretty good tutorial here):

印刷されます
import java.util.Arrays; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestPattern { 
    public static void main(String[] args) { 
     String query = "bob"; 
     System.out.println("Searching for \"" + query + "\"..."); 
     Pattern patt = Pattern.compile(query); 
     Arrays.asList(
       "Bob has a cat bob", 
       "Bob has a dog", 
       "Chris has a cat", 
      "Cat has a chris that is a bob") 
     .forEach(line -> { 
      System.out.println("Checking in line = \"" + line + "\""); 
      Matcher matcher = patt.matcher(line.toLowerCase()); 
      while (matcher.find()) { 
       System.out.println("found! index = " + matcher.start()); 
      } 
     }); 
    } 
} 

java.nioと幸せなコーディングを読んで、あなたのファイルに

Searching for "bob"... 
Checking in line = "Bob has a cat bob" 
found! index = 0 
found! index = 14 
Checking in line = "Bob has a dog" 
found! index = 0 
Checking in line = "Chris has a cat" 
Checking in line = "Cat has a chris that is a bob" 
found! index = 26 

プラグイン!

乾杯!

関連する問題