2017-06-06 100 views
1

我的目標是編寫一個函數(Ri),該函數返回json文件中包含術語i的行數,爲此,我通過查找單詞我初始化了,但後來我不知道如何推廣。 這是我開始代碼:如何使用java搜索json文件中的任何單詞

public class rit { 
private static final String filePath = "D:\\c4\\11\\test.json"; 
    public static void main(String[] args) throws FileNotFoundException, ParseException, IOException { 
     try{ 
      InputStream ips=new FileInputStream(filePath); 
      InputStreamReader ipsr=new InputStreamReader(ips); 
      BufferedReader br=new BufferedReader(ipsr); 
      String ligne; 
       String mot="feel"; 
       int i=1; 
       // nombre de lignes totales contenant le terme 
       int nbre=0; 
      while ((ligne=br.readLine())!=null){ 

      try { 
      // read the json file 
       JSONParser jsonParser = new JSONParser(); 
      JSONObject jsonObject = (JSONObject) jsonParser.parse(ligne); 

       // get a number from the JSON object 
      String text = (String) jsonObject.get("text"); 

         if (text.contains(mot)){ 
         nbre++; 
         System.out.println("Mot trouvé a la ligne " + i); 
         i++; 

         } 

     } catch (ParseException ex) { 
      ex.printStackTrace(); 
     } catch (NullPointerException ex) { 
      ex.printStackTrace(); 
     }} 

       System.out.println("number of lines Which contain the term: " +nbre); 
    br.close(); 
}  
catch (Exception e){ 
    System.out.println(e.toString()); 
}}} 

,輸出是:

Mot trouvé a la ligne 1 
Mot trouvé a la ligne 2 
number of lines Which contain the term: 2 

如果可能的話概括,如何做到這一點?

+0

嘗試使用['regex'(https://stackoverflow.com/documentation/regex/topics) – TheDarkKnight

+0

我不明白你意思是'泛化'。你的意思是在運行時改變String'mot'嗎? –

+0

我想搜索任何沒有初始化的詞 – celia

回答

0

String args[] in public static void main(String[] args)是輸入參數。因此,對於運行java rit.class feel,args將是[feel]

你可以讓你的程序期望在這些輸入參數字(甚至是文件路徑):

public static void main(String[] args) { 
    if(args.length != 2){ 
     // crash the application with an error message 
     throw new IllegalArgumentException("Please enter $filePath and $wordToFind as input parameters"); 
    } 
    String filePath = args[0]; 
    String mot = args[1]; 
    System.out.println("filePath : "+filePath); 
    System.out.println("mot : "+mot); 
} 

另一種方式做,是爲了等待用戶輸入。它的整潔,因爲你可以在一個循環中包並重復使用:

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); // used for scanning user input 
    while(true){ 
     System.out.println("please enter a word : "); 
     String mot = scanner.nextLine(); // wait for user to input a word and enter 
     System.out.println("mot is : "+mot); 
    } 
} 
+0

我會試試這個。謝謝。 – celia

+0

它解決了我的問題,謝謝。 – celia

+0

我還有一個問題,我想返回在同一日期的女巫包含術語我的行數,知道我有一個包含具有不同日期的推文的json文件。如何進行? – celia