2015-11-13 38 views
0

我被賦予了從Java讀取.txt文件的任務。該文件包含的東西如下:驗證文件中的字符串

ID:SampleID

工作:經理

名稱:塞繆爾·拉胡爾

讀取成功,我能夠打印文件內容。我用掃描儀讀取文件:

FileReader _reader = new FileReader(_name); 
      BufferedReader _br = new BufferedReader(_reader); 


      while((line = _br.readLine()) != null) { 

       System.out.println(line); 
      } 

的問題是,我需要驗證,例如,該ID是不是空的,例如,

ID:

如果ID爲空,則會顯示錯誤。我期望爲此任務使用「分隔符」。

編輯:

Scanner s = new Scanner(line).useDelimiter("ID:\\s*"); 

       System.out.println(s.next()) 

我用.useDelimiter,但問題是,它顯示的文本,如工作和姓名,這可能是誤導爲「ID」的其餘部分,然後ID的值始終不爲空。

我想在ID後邊的「:」(除了包括Job:Manager和Name:Samuel Rahul之後的整個String之外)的確切字符串。這讓我感到困惑,所以我可以驗證ID字符串是否爲空。

如果我可以在「ID:」之後得到確切的字符串,並排除他們的下一行,那麼我可以驗證該值。我認爲我的正則表達式是錯誤的,但我找不到。

+2

您可以使用[Scanner](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)。 – Mena

+0

你可以用':'分割'line',並檢查splittet.length> 1 && splittet [1]!= null &&!splittet [1] .trim()。equals(「」)'。 – SomeJavaGuy

+0

我編輯了這個問題。我使用.useDelimiter來查看將要打印的內容,但它只是顯示字符串的其餘部分,直到「Rahul」。 有沒有辦法讓它不包含下一行的字符串? –

回答

0

你可以做到這一點下面的代碼:

 String id="ID:SampleID"; 
     String arr[] = id.split(":"); 
     String key=arr[0]; 
     String value=arr[1]; 

     if (value != null && "".equals(value.trim())){ 
      System.out.println("ALL IS PERFECT!!"); 
     } 
     else{ 
      System.out.println("RAISE ERROR!!"); 
     } 
+0

提供解決方案,而不是教授編程實踐......不酷。 – XenoRo

+0

我認爲解決方案將起作用。 –

+1

我沒有說解決方案不起作用。我說,當OP明確指出這是一項任務時,給予解決方案並不是一個受歡迎的方法......爲此,他應該是面臨問題並提出解決方案的人。 – XenoRo

0

因爲這是一個任務,我不會給一個解決方案,而是嘗試教你你需要爲了解決這個問題,以學習什麼你自己。

問題:

  1. 你需要能夠讀取該文件,並提取它的內容。
    • 你已經達到了目標;雖然,根據你的例子,Scanner可能是矯枉過正。
  2. 你需要從他們的分開你的性質(標識)。
    • 這通常被稱爲解析;所以你需要解析的文件/內容。
    • 圖案從在您的示例值單獨屬性是良好定義的,非常容易:在任何給定的line,內容之前:字符是property和內容:字符是value
  3. 作爲你的作業,你需要檢查,如果你的property稱爲IDvalue,或者換句話說,它的valueempty

如何解決:

  1. 爲了您的分配,一個更合適的解決辦法可能是使用while(BufferedReader.ready())循環中BufferedReader.readLine()方法。

  • 有許多方法來解決解析:
  • 溶液1

    • String.indexOf(char)':'炭。
      或...
    • String.indexOf(String)":"字符串。
      聯合...
    • String.substring(int begin, int end)

    溶液2

    • String.split(String pattern)":"模式,其中result[0]將是propertyresult[1]將是value

    溶液3

    • 使用Pattern & Matcher結構;在這種情況下,您使用的Scanner已經有內置的Pattern,可以重複使用;但是這可能比你任務的意圖稍微有點兒。

    其他解決方案

    • 許多其他的解決方案是可能的。

  • 知道如果該值是空的(或,在其它類似的情況下null),你後解析它從屬性標識符,則易足夠:

    • String.isEmpty(),或者更寬容只包含空格字符的字符串,String.trim().isEmpty()
  • +0

    我現在只需要瞭解(我更像是理解問題的人),那麼你的'指導'對我很有幫助。我已經實現了第一個,但我認爲我需要找到另一個解決方法,因爲我認爲這是主要問題。 –