You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用StringTokenizer解析字符串提取信息时出现异常行为该如何修正

问题根因
  • StringTokenizer的nextToken(String delim)的入参是单字符分隔符集合,不是完整匹配的字符串。你传入"by"时,b和y两个字符都会被识别为分隔符,所以Charlie Montoya末尾的y被切分,导致作者名被截断、date字段错位。
  • 读取id时调用nextToken(".")后,解析位置停在.之前,未消费的.会被带入下一次读取的内容开头,导致title前缀多出冗余点号。
修正方案

方案1:调整StringTokenizer逻辑(兼容原有写法)

String line = "21. Sponge Cake by Charlie Montoya [2014-10-13]";
StringTokenizer tokenizer = new StringTokenizer(line, " ");
// 提取id
String id = tokenizer.nextToken(".").trim();
// 跳过id后的.和前置空格
tokenizer.nextToken(" ");
// 提取title:读到by标识为止
String title = tokenizer.nextToken("by").trim();
// 跳过by和前置空格
tokenizer.nextToken(" ");
// 提取author:读到日期左括号为止
String author = tokenizer.nextToken("[").trim();
// 提取日期:读到右括号为止
String date = tokenizer.nextToken("]").trim();

// 输出验证
System.out.println("id = \"" + id + "\";");
System.out.println("title = \"" + title + "\";");
System.out.println("author = \"" + author + "\";");
System.out.println("date = \"" + date + "\";");

方案2:正则表达式解析(更稳定,推荐)

使用正则匹配直接分组提取所有字段,适配性更强,不会出现分隔符误判问题:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Parser {
    public static void main(String[] args) {
        String line = "21. Sponge Cake by Charlie Montoya [2014-10-13]";
        // 正则分组:1=id 2=title 3=author 4=date
        Pattern pattern = Pattern.compile("(\\d+)\\. (.*?) by (.*?) \\[(.*?)\\]");
        Matcher matcher = pattern.matcher(line);
        if (matcher.find()) {
            String id = matcher.group(1);
            String title = matcher.group(2);
            String author = matcher.group(3);
            String date = matcher.group(4);
            
            System.out.println("id = \"" + id + "\";");
            System.out.println("title = \"" + title + "\";");
            System.out.println("author = \"" + author + "\";");
            System.out.println("date = \"" + date + "\";");
        }
    }
}

以上两种方案输出均符合要求:

id = "21";
title = "Sponge Cake";
author = "Charlie Montoya";
date = "2014-10-13";

内容的提问来源于stack exchange,提问作者NickJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:36:07