【问题标题】:token parsing in javajava中的token解析
【发布时间】:2010-12-10 10:44:37
【问题描述】:

我创建了一个带有 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 数组在每个索引中包含单个字符,而不是我希望在每个索引中包含单个标记。

有什么问题?

【问题讨论】:

标签: java


【解决方案1】:

您应该查看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)

您也可以使用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 

意思是它会把“fish”这个词删掉,把剩下的给你,用“fish”作为分隔符。

examples taken from the Java API

【讨论】:

  • StringTokenizer(String str, String "|") 这将使用 | 标记字符串作为分隔符。
  • 看看 Scanner,它比 StringTokenizer java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html好很多
  • 他们都工作得很好,我会建议他们中的任何一个超过 .split() !
  • @Filip Ekberg:我认为 split 很好,我们应该向@lakhaman 展示他的代码有什么问题,而不仅仅是解决它......
  • 来自 StringTokenizer 的 1.6 文档 ...“StringTokenizer 是一个遗留类,出于兼容性原因,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人使用 split 方法使用 String 或 java.util.regex 包代替。” ... split 或 regex 确实是标记化的首选方法。
【解决方案2】:

split 方法适用于正则表达式,并且由于管道符号 (|) 具有特殊含义并且是保留的,因此您需要像这样对其进行转义:

split("\\|");

您应该阅读正则表达式herehere

【讨论】:

    【解决方案3】:

    split 的参数是一个正则表达式。你应该这样做:

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

    或:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 2015-02-25
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多