Java 为什么不显示?

Java 为什么不显示?,java,arrays,file-io,Java,Arrays,File Io,它不会显示包含单词的代码行。 我希望它显示包含子字符串“put”的代码行,不区分大小写。应打印第一行和第二行,因为它们都包含子字符串“put”。 以下是文本文件: 测试输入 把文本放在这里 不在这里 在计算机上运行它 import java.io.*; 导入java.util.*; 公开课推杆{ 公共静态void main(字符串[]args){ 字符串firstTextFile=“PROG06.in.txt”; String secondTextFile=“PRG06.out.txt”; 扫描

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

测试输入

把文本放在这里

不在这里

在计算机上运行它

import java.io.*;
导入java.util.*;
公开课推杆{
公共静态void main(字符串[]args){
字符串firstTextFile=“PROG06.in.txt”;
String secondTextFile=“PRG06.out.txt”;
扫描文档=空;
PrintWriter NewFile=null;
试一试{
文档=新扫描仪(新文件(firstTextFile));
NewFile=newprintwriter(newfileoutputstream(secondTextFile,true));
}捕获(例外e){
System.out.println(“找不到”+firstTextFile);
系统出口(0);
System.out.println(“找不到”+secondTextFile);
系统出口(0);
}
while(Document.hasNextLine()){
String[]words=Document.nextLine().split(“”);
List wordList=Arrays.asList(words);
if(wordList.contains(“put”)){
打印(单词列表);
}
}
Document.close();
NewFile.close();
}
}
if(wordList.contains(“put”){
将只与单词“put”匹配,而不是“put”。您可能需要对其全部执行多个if/else语句,或者需要在拆分原始字符串之前对其执行
.toLowercase

if(wordList.contains(“put”)){
将只匹配单词“put”,而不是“put”。您可能需要对其全部执行多个if/else语句,或者需要在拆分原始字符串之前对其执行
.toLowercase

至于“测试输入”未得到处理

        String[] words = Document.nextLine().split(" ");
        List<String> wordList = Arrays.asList(words);
        if (wordList.contains("put")) {  <--  this condition is failing
            NewFile.print(wordList);
        }
就“测试输入”而言,没有得到处理

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

如果要搜索子字符串“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);
    }
}

如果要搜索子字符串“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);
    }
}

详细的正则表达式适用于我:

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

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

详细的正则表达式适用于我:

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


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

尝试使用
wordList.contains(“Put”)
而不是
wordList.contains(“Put”)
@jacknad,这将适用于“Put”,然后,但不适用于“Put”、“Put”或其任何其他上下组合。Nicholas下面使用的答案。toLowerCase捕获所有情况。尝试使用
wordList.contains(“Put”)
not
wordList.包含(“put”)
@jacknad,可用于“put”,then,但不用于“put”,“put”,或其任何其他上/下组合。Nicholas下面关于使用.toLowerCase的回答捕获了所有情况。是的,我知道我正在测试,但单词输入已放入其中,它不会显示任何内容。是否要使用wordList或nextLine?@Logan,这是因为List.contains(“put”)只有在任何元素完全匹配时才会返回true“put”。“input”不等于“put”,因此不匹配,也不应该匹配。那么john,你建议我怎么做来修复它?Logan,实际上我对你想要什么有点困惑。我以为你只想打印一行,如果它有“put”这个词"在那里,这不同于在一行的任何地方按顺序打印一行字符P-U-T。如果你想打印后一行,那么按照Henry Keiter的回答。是的,我知道我在测试,但单词输入已经输入了,它不会显示任何内容。你想打印单词列表还是下一行?@Logan,这是因为List.contains(“put”)仅在任何元素与“put”完全匹配时才会返回true。“input”不等于“put”,因此将不匹配,也不应该匹配。那么john,你建议我如何修复它?Logan,我实际上对你想要的东西有点困惑。我以为你只想打印一行,如果它有“put”这个词在这里,这不同于在一行中的任何位置按顺序包含字符P-U-T的情况下打印一行。如果要打印字符P-U-T,请按照Henry Keiter的回答进行操作。检查代码中包装您引用的代码的部分-这是一个while循环,循环遍历每一行。我们正在寻找第二行的成功之处(其中有“Put”,而不是第一行)。没错,但OP也担心“Test input”一词没有得到预期的处理。检查包装您引用的代码的代码部分-这是一个while循环,循环遍历每一行。我们正在寻找第二行的命中率(其中有“Put”,而不是第一行)是的,但OP也担心“测试输入”一词没有得到预期的处理。+1用于能够破译OP想要的内容,并提供非常流畅的代码。它运行,但在屏幕上没有显示任何内容output@Logan你是说控制台输出?我是根据你的代码输出的,所以带“put”的行在它们中,写入到
NewFile
,而不是打印到屏幕上。如果您想将行打印出来(到控制台),请使用
System.out.println(line);
+1,回答很好……我想他是在寻找独立的“put”,但如果他正在寻找任何版本的p-u-t.+1作为abl,这在任何情况下都是有效的