2009-10-27 74 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