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

时间:2015-10-27 05:44:49

标签: java string args

我想接受一个文本文件(由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;
        }
    }
}

3 个答案:

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

答案 1 :(得分: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]);
        }
    }
}

答案 2 :(得分:0)

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