【问题标题】:extracting the word next to a specific word in a text file using java使用java提取文本文件中特定单词旁边的单词
【发布时间】:2013-12-29 11:34:29
【问题描述】:

我想读取一个文本文件并打印已知单词之前的单词,例如在 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();
            }
        }
    }
    }

【问题讨论】:

    标签: java text nlp


    【解决方案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")));
         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();
            }
        }
    }
    }
    

    删除do loop 之前的s.next()while 之前的do loop 块。 它在一个循环中两次转义单词。从而导致单词丢失。

    【讨论】:

      【解决方案2】:

      您的代码已经打印出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

      【讨论】:

        【解决方案3】:

        问题只是一个简单的问题:您在循环中调用 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”开头的评论

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-18
          • 1970-01-01
          • 2020-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多