从字符串第8位截取至末尾遇System.ArgumentOutOfRangeException错误求助
解决String.Substring触发ArgumentOutOfRangeException的问题
嘿,这问题我之前也踩过坑!咱们一步步来捋清楚:
错误根源
首先要明确:.NET里字符串的索引是从0开始计数的,你说的“第8个字符”,对应的实际索引是7,不是8!另外,如果你的字符串总长度小于等于8,直接用Substring(8)肯定会触发这个异常——因为索引8根本不在字符串的有效范围内。
咱们看你的三个字符串:
Hrvatska ima more:字符数(含空格)肯定大于8,没问题;- 但如果有字符串长度刚好是8或者更短,那索引8就超出范围了,直接触发报错。
修复方案
方案1:修正起始索引(针对确定长度足够的字符串)
如果确认所有目标字符串长度都大于8,直接把起始索引改成7(对应第8个字符):
string s1 = "Hrvatska ima more"; string s2 = "Italija je prvak svijeta"; string s3 = "Hrvatska je prvak svijeta"; // 截取第8个字符到末尾(索引7开始) string result1 = s1.Substring(7); string result2 = s2.Substring(7); string result3 = s3.Substring(7);
方案2:增加安全检查(兼容短字符串)
如果不确定字符串长度,先判断再截取,避免异常:
string GetSubstringFrom8thChar(string input) { // 如果字符串长度不足8,直接返回原字符串或空串,可根据需求调整 if (input.Length <= 7) return input; // 从索引7开始截取到末尾 return input.Substring(7); } // 使用示例 string result1 = GetSubstringFrom8thChar(s1); string result2 = GetSubstringFrom8thChar(s2); string result3 = GetSubstringFrom8thChar(s3);
额外说明
如果你用的是Substring(startIndex, length)重载,还要确保startIndex + length不超过字符串总长度,但你这里是截取到末尾,用单参数的Substring(startIndex)就够了,只要startIndex小于字符串长度就不会报错。
内容的提问来源于stack exchange,提问作者user8812547
相关产品推荐
相关产品推荐

