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

如何提取字符串中冒号与句号间的子串并赋值给对应属性?

问题原因

调用substring方法时如果始终从字符串起始位置搜索冒号、句号的索引,会重复匹配第一个出现的对应符号,最终计算出的截取区间要么结束索引小于起始索引返回空串,要么索引值超出字符串总长度抛出越界异常。

方案1:修正substring截取逻辑

以下为Java语言示例,逻辑可通用到所有带substring、indexOf方法的开发语言:

String rawStr = "Account Number: 12345. Account Name: Jimmy John. Account Balance: 3.9.";
// 标记当前扫描的起始位置,避免重复匹配前面的符号
int scanStart = 0;

// 提取Account Number
int colonPos = rawStr.indexOf(':', scanStart);
int dotPos = rawStr.indexOf('.', colonPos);
String accountNumber = rawStr.substring(colonPos + 1, dotPos).trim();
scanStart = dotPos + 1;

// 提取Account Name
colonPos = rawStr.indexOf(':', scanStart);
dotPos = rawStr.indexOf('.', colonPos);
String accountName = rawStr.substring(colonPos + 1, dotPos).trim();
scanStart = dotPos + 1;

// 提取Account Balance
colonPos = rawStr.indexOf(':', scanStart);
dotPos = rawStr.indexOf('.', colonPos);
String accountBalance = rawStr.substring(colonPos + 1, dotPos).trim();

方案2:正则匹配(更简洁不易出错)

直接通过正则规则匹配冒号后到下一个句号前的所有内容,无需手动计算索引,适配性更强:

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

// 核心逻辑部分
String rawStr = "Account Number: 12345. Account Name: Jimmy John. Account Balance: 3.9.";
// 正则含义:匹配冒号+任意数量空格,捕获所有非句号字符直到遇到句号
Pattern pattern = Pattern.compile(":\\s*([^.]+)\\.");
Matcher matcher = pattern.matcher(rawStr);

String accountNumber = matcher.find() ? matcher.group(1).trim() : "";
String accountName = matcher.find() ? matcher.group(1).trim() : "";
String accountBalance = matcher.find() ? matcher.group(1).trim() : "";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:05