使用java提取文本文件中特定单词旁边的单词

时间:2013-12-29 11:34:29

标签: java text nlp

我想阅读一个文本文件,然后在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();
            }
        }
    }
    }

3 个答案:

答案 0 :(得分:0)

您的代码已打印manwander,但缺少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”开头的评论