为什么这不显示?

时间:2013-05-22 16:33:53

标签: java arrays file-io

它不会显示包含单词put的代码行。 我希望它显示包含子字符串“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 个答案:

答案 0 :(得分:4)

if (wordList.contains("put")) {行只匹配'put'这个词,而不是'Put'。你需要为它全部执行多个if / else语句,或者在拆分之前需要对原始字符串执行.toLowercase

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

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

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

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