0

它不会显示包含单词的代码行。我希望它显示包含子字符串“put”的代码行,不区分大小写。应该打印第一行和第二行,因为它们都包含子字符串“put”。这是文本文件:

测试输入。

把文字放在这里。

不在这里。

在计算机上运行它。

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

public class Put {
    public static void main(String[] args) {
        String firstTextFile = "PROG06.in.txt";
        String secondTextFile = "PRG06.out.txt";
        Scanner Document = null;
        PrintWriter NewFile = null;
        try {
            Document = new Scanner(new File(firstTextFile));
            NewFile = new PrintWriter(new FileOutputStream(secondTextFile, true));
        } catch (Exception e) {
            System.out.println("Could not find " + firstTextFile);
            System.exit(0);
            System.out.println("Could not find " + secondTextFile);
            System.exit(0);
        }
        while (Document.hasNextLine()) {
            String[] words = Document.nextLine().split(" ");
            List<String> wordList = Arrays.asList(words);
            if (wordList.contains("put")) {
                NewFile.print(wordList);
            }
        }
        Document.close();
        NewFile.close();
    }
}
4

4 回答 4

4

该行将if (wordList.contains("put")) {仅匹配单词“put”,而不匹配“Put”。您要么需要对所有内容执行多个 if/else 语句,要么需要.toLowercase在拆分之前对原始字符串执行 a。

于 2013-05-22T16:38:28.873 回答
2

如果要搜索子字符串“put”,则必须实际执行该操作。现在,您只是在搜索列表以查看它是否包含单个单词。手动拆分字符串并没有给自己带来任何好处。您真正想要的是逐行子字符串搜索。为此,你最好大大简化你的循环,所以你会有这样的东西:

String line;
while (Document.hasNextLine()) {
    line = Document.nextLine();
    if (line.toLowerCase().contains("put")) {
        // Add the line if "put" appears anywhere in the lowercase version of it.
        NewFile.print(line);
    }
}
于 2013-05-22T16:52:06.773 回答
0

就“测试输入”未得到处理而言

        String[] words = Document.nextLine().split(" ");
        List<String> wordList = Arrays.asList(words);
        if (wordList.contains("put")) {  <--  this condition is failing
            NewFile.print(wordList);
        }

现在words[]有了{"Test""Input"}。您正在将此数组转换为ArrayList wordList

当你说的时候wordList.contains("put"),它会检查是否ArrayList有这个词"put"(这个条件失败了,因为ArrayList没有put,而是有input)。

你应该做

        String[] words = Document.nextLine().split(" ");
        for(String w : words) {
           if (w.toLowerCase().contains("put")) { <-- this condition should handle all the scenario, including Put, input etc
               NewFile.print(Arrays.asList(words));
           }
        }
于 2013-05-22T16:47:36.420 回答
0

一个详细的正则表达式对我有用:

   public static void main(String[] args) {
        String firstTextFile = "PROG06.in.txt";
        String secondTextFile = "PRG06.out.txt";

        try{

            LineNumberReader reader = new LineNumberReader(new FileReader(new File("/folder",firstTextFile)));
            PrintWriter writer = new PrintWriter(new File("/folder",secondTextFile));

            String line = null;
            while ( (line = reader.readLine()) != null){
                if (line.matches(".*\\s[pP][uU][tT]\\s.*")){
                    writer.println(line);
                    writer.flush();
                }
            }

        }catch (IOException eio){
            eio.printStackTrace();
        }
    }

用您自己的替换文件夹路径。

于 2013-05-22T17:08:10.520 回答