Java:如果包含特定单词,则打印一次

Java: Printing a line once if it contains specific words

我想接收一个文本文件(由 args[0] 给出)并逐行检查 args[0] 之后所有参数给出的单词,如果包含所述内容,则用星号打印每一行单词。

我很确定我现在拥有的代码足以检查一个单词,但我不确定如何检查一行是否包含多个单词(由 args 给出)并且仅用于如果是,打印一次该行。

我认为 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;
        }
    }
}

将 args 放入集合中并检查文本的每个单词,直到找到匹配项或 eol。

您是否要检查所有(和)

            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);
            }

下面是适用于找到的所有单词的代码。

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]);
        }
    }
}