【问题标题】:Unexpected Behaviour on StringTokenizerStringTokenizer 上的意外行为
【发布时间】:2021-10-25 09:55:56
【问题描述】:

我有这个输入字符串:

21. Sponge Cake by Charlie Montoya [2014-10-13]

我正在尝试解析字符串以从中提取信息,即:

id = "21"; title = "海绵蛋糕"; 作者=“查理蒙托亚”; 日期=“2014-10-13”;

我正在使用 StringTokenizer:

    StringTokenizer tokenizer = new StringTokenizer(line, " ");
    System.out.println("id? : "+ tokenizer.nextToken(".").trim());
    System.out.println("title? : "+ tokenizer.nextToken("by").trim());
    System.out.println("author? : "+tokenizer.nextToken().trim());
    System.out.println("date? : "+tokenizer.nextToken("[").trim());

我的输出是:

    id? : 21
    title? : . Sponge Cake
    author? : Charlie Monto
    date? : ya

这里有各种各样的错误: 标题前面有“。”这应该是 id 之后的分隔符。 作者姓名的最后 2 个字符出现在日期字段中 缺少实际日期。

我该如何解决这些问题?

【问题讨论】:

  • StringTokenizer 有点过时了。我建议改用Scanner

标签: java stringtokenizer


【解决方案1】:

标记器不会使用分隔符,当您更改分隔符时,它会成为下一个标记的一部分。 这应该可以解决它:

System.out.println("id? : " + tokenizer.nextToken(".").trim());
tokenizer.nextToken(" ");
System.out.println("title? : " + tokenizer.nextToken("by").trim());
tokenizer.nextToken(" ");
System.out.println("author? : " + tokenizer.nextToken("[").trim());
System.out.println("date? : " + tokenizer.nextToken("[]").trim());

我还建议使用 Scanner 类,就像 Sweeper 已经做过的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多