2013-07-14 57 views
-2

我要來標記文本文件是如下 產品,品牌 電視,名稱:LG:索尼 冰箱,凱爾維納特,名稱:戈德瑞難度寫正則表達式模式

我想省略第一線products,brands

,並把從下一行的數據開始在具有這種結構 類產品{ 字符串標題的類的對象; 名單品牌; }

標題應該包含之前的第一個事情之前「」 列表品牌後應包含所有單獨的令牌‘的名字:’ 我不得不忽視單詞‘名稱’,而不是放在對象字段

例如名爲督促對象應該包含這個數據 prod.title =電視的品牌 列表必須包含LG和索尼

是什麼做的最好方法?

這是代碼:: split()接收正則表達式,其中空間是重要

public class tokenize { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int i=0; 
    try { 
     FileReader fr=new FileReader("myfiles\\"+"sample.txt"); 
     BufferedReader br=new BufferedReader(fr); 
     String line; 
     try { 
      while((line=br.readLine())!=null){ 
       String tokens[]=line.split(", | :"); 
       while(tokens.length!=0) 
       { 
        System.out.println(tokens[i]); 
        i++; 
        System.out.println(); 
       } 

      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 
+0

這樣做是嘗試編碼,並要求此處查看具體問題的最好方法所需的Pattern。您完全描述了必須完成的工作以及類應該如何工作,因此編寫代碼並在具有某些問題的情況下回到特定問題 – BackSlash

+1

您可以顯示已經嘗試過的代碼嗎? –

回答

0
  1. 我會用一個Scanner對象由線
  2. 讀取行,並插入通過掃描儀
+0

FileReader fr = new FileReader(「myfiles \\」+「sample.txt」); \t \t \t Scanner scn = new Scanner(fr); \t \t \t Pattern ptrn = Pattern.compile(「\\ s * [,:] \\ s *」); \t \t \t scn.useDelimiter(ptrn); \t \t \t而(scn.hasNext()) \t \t \t { \t \t \t的System.out.println(scn.nextLine()); \t \t \t} – nnm

+0

這就是我添加...它打印文本文件,因爲它是 – nnm

+0

嘗試在println() –

0

方法。

你分割更改爲:

String tokens[]=line.split("\\s*[,:]\\s*"); 

這應該工作。方括號表示「裏面提到的任何字符」。 \\s*表示「零個或多個空格」。

看來,這是你所需要的。

+0

這樣做後,我得到一個 arrayindexoutofbounds例外......只有產品和品牌是印刷的兩個字 – nnm