我正在尝试编写一个程序,该程序将接受用户输入(长字符消息),存储消息并搜索文本文件以查看这些单词是否出现在文本文件中。我遇到的问题是我只能读取消息的第一个字符串并将其与文本文件进行比较。例如,如果我输入"学习&#34 ;;在文本文件中的一个单词,我将得到一个结果显示在文件中找到。但是如果我输入"学习是"它仍然只会将学习作为文件中的单词返回,即使"是"也是文本文件中的一个单词。我的程序似乎无法读取空白区域。所以我想我的问题是,如何扩充我的程序来执行此操作并阅读文件中的每个单词?我的程序是否也可以在用户的原始消息中读取包含或不包含空格的每个单词,并将其与文本文件进行比较?
谢谢
import java.io.*;
import java.util.Scanner;
public class Affine_English2
{
public static void main(String[] args) throws IOException
{
String message = "";
String name = "";
Scanner input = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("Please enter in a message: ");
message = scan.next();
Scanner file = new Scanner(new File("example.txt"));
while(file.hasNextLine())
{
String line = file.nextLine();
for(int i = 0; i < message.length(); i++)
{
if(line.indexOf(message) != -1)
{
System.out.println(message + " is an English word ");
break;
}
}
}
}
}
答案 0 :(得分:0)
您可以试试这个。使用此解决方案,您可以在example.txt文件中找到用户输入的每个单词:
public static void main(String[] args) throws IOException
{
String message = "";
String name = "";
Scanner input = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("Please enter in a message: ");
message = scan.nextLine();
Scanner file = new Scanner(new File("example.txt"));
while (file.hasNextLine())
{
String line = file.nextLine();
for (String word : message.split(" "))
{
if (line.contains(word))
{
System.out.println(word + " is an English word ");
}
}
}
}
答案 1 :(得分:0)
正如马克在评论中指出的那样,改变
scan.next();
要:
scan.nextLine();
应该有用,我试过并为我工作。
答案 2 :(得分:0)
如果您可以使用Java 8和Streams API
public static void main(String[] args) throws Exception{ // You need to handle this exception
String message = "";
Scanner input = new Scanner(System.in);
System.out.println("Please enter in a message: ");
message = input.nextLine();
List<String> messageParts = Arrays.stream(message.split(" ")).collect(Collectors.toList());
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
reader.lines()
.filter( line -> !messageParts.contains(line))
.forEach(System.out::println);
}
答案 3 :(得分:0)
我建议您先处理文件并构建一组合法的英文单词:
public static void main(String[] args) throws IOException {
Set<String> legalEnglishWords = new HashSet<String>();
Scanner file = new Scanner(new File("example.txt"));
while (file.hasNextLine()) {
String line = file.nextLine();
for (String word : line.split(" ")) {
legalEnglishWords.add(word);
}
}
file.close();
接下来,从用户那里获得输入:
Scanner input = new Scanner(System.in);
System.out.println("Please enter in a message: ");
String message = input.nextLine();
input.close();
最后,将用户的输入拆分为令牌,并检查每个令牌是否合法:
for (String userToken : message.split(" ")) {
if (legalEnglishWords.contains(userToken)) {
System.out.println(userToken + " is an English word ");
}
}
}
}
答案 4 :(得分:0)
你有很多解决方案,但是当找到匹配时,我建议你看一下Pattern和Matcher并使用正则表达式 我还没有完全理解你的问题,但你可以添加这样的东西(我没有测试代码,但这个想法应该可以正常工作):
public static void main(String[] args) throws IOException{
String message = "";
String name = "";
Scanner input = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("Please enter in a message: ");
message = scan.next();
Scanner file = new Scanner(new File("example.txt"));
String pattern = "";
for(String word : input.split(" ")){
pattern += "(\\b" + word + "\\b)";
}
Pattern r = Pattern.compile(pattern);
while(file.hasNextLine())
{
String line = file.nextLine();
Matcher m = r.matcher(line);
if(m.matches()) {
System.out.println("Word found in: " + line);
}
}
}