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

如何用IndexOf与Substring提取alt值并解决去除alt=前缀时的异常?

提取alt属性值的正确实现

需求:从字符串 alt="hello world" >" 中提取出 hello world,使用IndexOf和Substring方法实现。

原代码问题分析

  1. 第一段代码:
int indexDescription = line.IndexOf("alt=");
int indexDescriptionEnd = line.IndexOf("\" >");
string descriptionResult = line.Substring(indexDescription, indexDescriptionEnd - indexDescription);

结果包含alt=前缀,因为Substring的起始位置是alt=的索引,直接截取到" >的起始位置,自然包含了前面的alt="部分。

  1. 第二段修改后的代码:
string descriptionResult = line.Substring(indexDescription + 6, indexDescriptionEnd - indexDescription);

触发ArgumentOutOfRangeException,原因是Substring的第二个参数是截取长度而非结束索引。修改起始位置后,长度仍用原结束索引减原起始索引,导致长度超出字符串有效范围。

正确实现方案

方案一:精准定位引号位置

直接定位alt=前后的引号,更能适配格式变动:

// 找到"alt="的起始索引
int indexAlt = line.IndexOf("alt=");
if (indexAlt == -1) 
{
    // 处理找不到alt=的情况
    string descriptionResult = string.Empty;
    return;
}

// 找到alt=之后的第一个双引号(值的起始引号)
int startQuote = line.IndexOf('"', indexAlt + "alt=".Length);
if (startQuote == -1)
{
    string descriptionResult = string.Empty;
    return;
}

// 找到起始引号之后的第一个双引号(值的结束引号)
int endQuote = line.IndexOf('"', startQuote + 1);
if (endQuote == -1)
{
    string descriptionResult = string.Empty;
    return;
}

// 截取两个引号之间的内容
string descriptionResult = line.Substring(startQuote + 1, endQuote - startQuote - 1);

方案二:基于原代码修正长度计算

如果坚持用" >"作为结束标识,修正Substring的长度参数即可:

int indexDescription = line.IndexOf("alt=");
int indexDescriptionEnd = line.IndexOf("\" >");

if (indexDescription == -1 || indexDescriptionEnd == -1 || indexDescription + 5 >= indexDescriptionEnd)
{
    string descriptionResult = string.Empty;
    return;
}

// 起始位置跳过"alt=\"(共5个字符),长度为结束位置减去新的起始位置
string descriptionResult = line.Substring(indexDescription + 5, indexDescriptionEnd - (indexDescription + 5));

关键说明

  • Substring(startIndex, length)的第二个参数是从startIndex开始要截取的字符数,不是结束索引。
  • 必须增加边界判断(比如找不到目标子串的情况),避免空指针或越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:19