繁体   English   中英

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

[英]extracting the word next to a specific word in a text file using java

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

您的代码已打印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());
    }
}

高温超导

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 它会在一个循环中两次转义单词,从而导致单词丢失。

问题仅是一个简单的问题:您在循环中两次调用Scanner.next而不是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”开头的注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM