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