2017-08-31 69 views
1

我想寫一個java程序,將打開一個.txt文件,其中將包含文本段落。然後我想解析出一個文件的特定句子。特別是「應該有語句,例如:。Java的txt解析器

Test.txt的

大家好這裏是AA裝箱清單你應該有一個牙刷你 應該有一個手機充電器,你絕對應該有。您 錢包

目標輸出:。

應該有一個牙刷應該有一個手機充電器噓應該有 你的錢包。

現在我有文件選擇器正常工作。現在我只是試圖分解單個句子,然後我可以回過頭來添加「應該有邏輯」。現在程序正在識別不同的句子,但只是不斷重印整個段落。任何幫助通過這個步行我會非常感激。

import java.io.File; 
import java.util.Scanner; 
import javax.swing.JFileChooser; 

public class PickAFile { 
@SuppressWarnings("resource") 
public static void main(String[] args) { 
    JFileChooser chooser = new JFileChooser(); 

    int returnVal = chooser.showOpenDialog(null); 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 

     try { 
      System.out.println("You chose to open this file: " +  chooser.getSelectedFile().getName()); 

      Scanner input = new Scanner(System.in); 

      File file = new File(chooser.getSelectedFile().getName()); 

      input = new Scanner(file); 

      while (input.hasNextLine()) { 
       String message = input.nextLine(); 
       String[] sentences = message.split("(?<=[.!?])\\s* "); 
       for (String s : sentences) { 
        System.out.println(message); 
       } 
      } 

      input.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
} 

輸出:

您選擇打開此文件:test.txt的大家都好。這裏是一個包裝 列表。你應該有牙刷。你應該有一個手機充電器。 你絕對應該有你的錢包。

大家好。這是一個裝箱單。你應該有牙刷。你的手機充電器應該有 。而你絕對應該有你的錢包 。

大家好。這是一個裝箱單。你應該有牙刷。你的手機充電器應該有 。而你絕對應該有你的錢包 。

大家好。這是一個裝箱單。你應該有牙刷。你的手機充電器應該有 。而你絕對應該有你的錢包 。

大家好。這是一個裝箱單。你應該有牙刷。你的手機充電器應該有 。而你絕對應該有你的錢包 。

+0

在for循環中,你的意思是說的System.out.println(S); ?? –

+0

是的,卡爾。非常感謝!幫助我前進。現在正在分析單個句子。 – NotTheDroids

+0

幾個指針:1)'Scanner'及其next()方法將有助於迭代單詞。在迭代它們時,你可以記住最後兩個單詞,並且當它們是「應該」和「有」時,將它們與當前單詞一起顯示; 2)正則表達式:它可以搜索「應該有」的模式; 3)NLP:如果你真的想要一些可以處理邊緣情況的東西,比如「絕對」的話,你需要自然語言處理。有些圖書館正在處理這個問題,但即使如此,這也將是一個比前兩個更爲複雜的解決方案。 – Aaron

回答

1
 while (input.hasNextLine()) { 
      String message = input.nextLine(); 
      String[] sentences = message.split("(?<=[.!?])\\s* "); 
      List<String> shouldHaves = new ArrayList<String>(); 
       for (String s : sentences) { 
        if (s.contains("should have")) 
        shouldHaves.add(s); 
       } 
       for (String s : shouldHaves) { 
        System.out.println(s); 
       } 
     } 
+0

你們是最棒的!謝謝 – NotTheDroids

+0

@NotTheDroids請回顧一下,[當某人回答我的問題時該怎麼辦?](https://stackoverflow.com/help/someone-answers) – eshirima