2009-10-27 80 views
1

我已經創建了一個帶有printStream對象的文件,如下所示。java中的令牌解析

PrintStream outPutOffice = new PrintStream(
    new BufferedOutputStream(new FileOutputStream(inDir+"/Office.txt"))); 
outPutOffice.print(fValue + (findx < agtOffColCount ? "|" : "")); 

現在我必須閱讀它的內容並用「|」分隔它的標記。因爲我用「|」寫了標記分離。我已經編寫了如下所示的代碼,它將正確讀取行,但不會將單獨的標記與「|」字符。

BufferedReader inPutAgent = new BufferedReader(
    new InputStreamReader(new FileInputStream(inDir+"/Office.txt"))); 

String column=inPutAgent.readLine(); 
String []columnDetail = column.split("|"); 

columndetail數組在每個索引中包含單個字符,而是我想在每個索引中使用單個標記。

什麼問題?

+0

您可能還希望瞭解,一個作家和OutputStream的之間的區別是什麼。看看FileWriter API http://java.sun.com/j2se/1.5.0/docs/api/java/io/FileWriter.html – 2009-10-27 11:17:54

回答

6

split方法適用於正則表達式和自管道符號(|)具有特殊含義,是保留,你需要逃避這樣的:

split("\\|"); 

你應該閱讀關於正則表達式herehere

+0

所以可以更改|(管道符號)將解決我的問題? – lakhaman 2009-10-27 11:13:07

+0

我這麼認爲,試試看 – 2009-10-27 11:13:54

4

你應該看看StringTokenizer,這是這種類型的工作非常方便的工具。

StringTokenizer st = new StringTokenizer("this is a test"); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 

這將putput

this 
is 
a 
test 

採用第二種構造的StringTokenizer設置分隔符:

StringTokenizer(String str, String delim)

您也可能我們EA Scanner的評論家之一說,這可能看起來有點像這樣

String input = "1 fish 2 fish red fish blue fish"; 

Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); 

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

s.close(); 

輸出將

1 
2 
red 
blue 

含義,它會切出的單詞「魚」並給你休息,用「魚」作爲分隔符。

examples taken from the Java API

+2

StringTokenizer(String str,String「|」) 這會標記化帶有|的字符串作爲分隔符。 – 2009-10-27 11:14:43

+1

查看掃描器,它比StringTokenizer http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner好很多。html – 2009-10-27 11:16:10

+0

他們都工作得很好,我會建議他們任何一個.split()! – 2009-10-27 11:17:02

2

分裂的參數是一個正則表達式。你應該這樣做:

String []columnDetail = column.split("\\|"); 

或:

String []columnDetail = column.split("[|]"); 
+0

謝謝你的回答 – lakhaman 2009-10-27 11:19:31