我想阅读一个文本文件,然后在Java中打印已知单词xxx之前的单词。 我已经使用Scanner类在java中编写了这段代码。 但是这段代码只打印了“xxx”之前的一半字,而“xxx”之前的其他一些字则丢失了。 我想知道问题是什么,你可以解决这个问题。
测试文件包含
之类的内容Blah blah blah.. man xxx create blah blah .. wander xxx blah... then xxx ..
Need to print man,wander,then etc.,
public class Searchright {
public static void main(String[] args) throws IOException {
Scanner s = null;
String str;
try {
s = new Scanner(new BufferedReader(new FileReader("doc.txt")));
str=s.next();
do{
//while (s.hasNext()) {
str=s.next();
if((s.hasNext(("xxx"))||s.hasNext(("X.X.X”))))
{
//System.out.println(s.next()+" "+s.next() );
//System.out.println(s.next());
System.out.println(str);
//s.next();
}
s.next();
//System.out.println(s.next());
}while(s.hasNext());
}
finally{
if (s != null) {
//s.close();
}
}
}
}
答案 0 :(得分:0)
您的代码已打印man
和wander
,但缺少then
。我已经更新了你的代码以使用try资源而不是try-finally,并将下一个字分配给一个自己的变量,该变量经过测试所需的字符串:
public static void main(String[] args) throws IOException
{
try (Scanner s = new Scanner(new BufferedReader(new FileReader("doc.txt"))))
{
String str=s.next();
String next;
do
{
next = s.next();
if( next.equals("xxx") || next.equals("X.X.X") )
{
// Need to print man,wander,then etc.,
System.out.println(str);
}
str = next;
}
while(s.hasNext());
}
}
HTH
答案 1 :(得分:0)
public class Searchright {
public static void main(String[] args) throws IOException {
Scanner s = null;
String str;
try {
s = new Scanner(new BufferedReader(new FileReader("doc.txt")));
do{
//while (s.hasNext()) {
str=s.next();
if((s.hasNext(("xxx"))||s.hasNext(("X.X.X”))))
{
//System.out.println(s.next()+" "+s.next() );
//System.out.println(s.next());
System.out.println(str);
//s.next();
}
//System.out.println(s.next());
}while(s.hasNext());
}
finally{
if (s != null) {
//s.close();
}
}
}
}
在s.next()
之前和do loop
阻止while
之前删除do loop
。
它在一个循环中逃避了两次单词。这导致了缺失的单词。
答案 2 :(得分:0)
问题很简单:你在循环中调用Scanner.next
2次而不是1次:这应该有效:
public class Searchright {
public static void main(String[] args) throws IOException {
Scanner s = null;
String str;
try {
s = new Scanner(new BufferedReader(new FileReader("doc.txt")));
str=s.next();
do{
//while (s.hasNext()) {
str=s.next();
if((s.hasNext(("xxx"))||s.hasNext(("X.X.X”))))
{
//System.out.println(s.next()+" "+s.next() );
//System.out.println(s.next());
System.out.println(str);
//s.next();
}
//-> ADDED COMMENT HERE -------------------------- s.next();
//System.out.println(s.next());
}while(s.hasNext());
}
finally{
if (s != null) {
//s.close();
}
}
}
}
我认为代码应该与问题中的代码类似。它只是添加了以“// - > ADDED COMMENT HERE”开头的评论