java中的令牌解析

我用printStream对象创建了一个文件,如下所示。

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数组在每个索引中包含单个字符,而我想在每个索引中使用单个标记。

问题是什么?

split方法适用于正则表达式,因为管道符号(|)具有特殊含义并且是保留的,所以你需要像这样转义它:

 split("\\|"); 

你应该在这里或这里阅读正则表达式

您应该查看StringTokenizer ,它是这类工作的一个非常方便的工具。

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

这将是投入

  this is a test 

您使用StringTokenizer的Second Constructor来设置分隔符:

StringTokenizer(String str, String delim)

您也可以使用扫描仪作为评论员之一说这看起来有点像这样

  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 

这意味着它将删除“鱼”这个词,并以“鱼”作为分隔符给你rest。

从Java API获取的示例

分裂的论点是正则表达式。 你应该做:

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

要么:

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