2015-10-27 6 views
2

Я хочу взять текстовый файл (заданный args [0]) и по строке, проверить слова, заданные всеми аргументами после args [0], и распечатать каждая строка со звездочкой, если она содержит указанные слова.Java: печать строки один раз, если она содержит определенные слова

Я уверен, что код, который у меня есть на данный момент, достаточно хорош, чтобы проверить одно слово, но я не уверен, как проверить, содержит ли строка несколько слов (заданных аргументами) и только для печати линия один раз, если это произойдет.

Я предположил, что цикл for может работать, за исключением того, что он будет печатать строку несколько раз, если бы она содержала несколько слов.

import java.util.*; 
import java.io.*; 

public class WordFinder 
{ 
    public static void main(String args[]) 
    { 
     File file = new File(args[0]); 
     Scanner in = null; 
     try 
     { 
      in = new Scanner(file); 
      while(in.hasNext()) 
      { 
       String line = in.nextLine(); 
       if (line.contains(args[1])) 
       { 
        System.out.println("* " + line); 
       } 
       else 
       { 
        System.out.println(" " + line); 
       } 
      } 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("Cannot find " + args[0]) 
      return; 
     } 
    } 
} 
+0

Мой учитель по программированию в основном дал нам этот тип заданий :) –

ответ

3

Либо вы хотите проверить для всех (и)

  boolean foundAll = true; 
      for (int i = 1; i < args.length && foundAll; ++i) { 
       foundAll = foundAll && line.contains(args[i]); 
      } 
      if (foundAll) 
      { 
       System.out.println("* " + line); 
      } 
      else 
      { 
       System.out.println(" " + line); 
      } 

или, по крайней мере, один матч (или)

  boolean foundAny = false; 
      for (int i = 1; i < args.length; ++i) { 
       foundAny = line.contains(args[i]); 
       if (foundAny) break; 
      } 
      if (foundAny) 
      { 
       System.out.println("* " + line); 
      } 
      else 
      { 
       System.out.println(" " + line); 
      } 
0

Поместите аргументы в набор и проверьте каждое слово текста до тех пор, пока совпадение не будет найдено или не будет найдено.

1

Ниже приведен код, который работает для всех найденных слов.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class WordFinder { 
    private static final String DEFAULT_LINE_INDICATOR = " "; 
    private static final String ALL_WORDS_FOUND_INDICATOR = "* "; 

    public static void main(String args[]) { 
     File file = new File(args[0]); 
     Scanner in = null; 
     try { 
      in = new Scanner(file); 
      while (in.hasNext()) { 
       boolean allWordsFound = true; 
       String line = in.nextLine(); 
       for (int index = 1; index < args.length; index++) { 
        allWordsFound = line.contains(args[index]); 
        if (!allWordsFound) { 
         break; 
        } 
       } 
       String modifiedLine = allWordsFound ? ALL_WORDS_FOUND_INDICATOR + line : DEFAULT_LINE_INDICATOR + line; 
       System.out.println(modifiedLine); 
      } 
     } catch (FileNotFoundException e) { 
      System.out.println("Cannot find " + args[0]); 
     } 
    } 
} 

Если вы хотите, любое слово, вы можете использовать следующий код

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class WordFinder { 
    private static final String DEFAULT_LINE_INDICATOR = " "; 
    private static final String WORD_FOUND_INDICATOR = "* "; 

    public static void main(String args[]) { 
     File file = new File(args[0]); 
     Scanner in = null; 
     try { 
      in = new Scanner(file); 
      while (in.hasNext()) { 
       boolean atLeastOneWordFound = false; 
       String line = in.nextLine(); 
       for (int index = 1; index < args.length; index++) { 
        atLeastOneWordFound = line.contains(args[index]); 
        if (atLeastOneWordFound) { 
         break; 
        } 
       } 
       String modifiedLine = atLeastOneWordFound ? WORD_FOUND_INDICATOR + line : DEFAULT_LINE_INDICATOR + line; 
       System.out.println(modifiedLine); 
      } 
     } catch (FileNotFoundException e) { 
      System.out.println("Cannot find " + args[0]); 
     } 
    } 
} 
Смежные вопросы