它不会显示包含单词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();
}
}
答案 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();
}
}
用您自己的文件夹路径替换文件夹路径。