【问题标题】:Substring causing index and length error导致索引和长度错误的子字符串
【发布时间】:2016-05-18 16:02:29
【问题描述】:

我的代码中有一个部分,我运行它来检查该项目是西班牙语项目还是英语项目。我在一个旧的 vb.net 应用程序中使用这个逻辑。

public int Spanish_Item()
{
    int i = 0;
    object j = 0;
    int k = 0;
    string ss = null;
    string sp_item = null;
    sp_item = TxtItem.Text.Trim();
    k = 0;
    for (i = 1; i <= 15; i++)
    {
        ss =  sp_item.Substring(i, 2);
        if (ss == "XX")
        {
            k = 1;
            i = 16;
        }
    }
    return k;
}

以下代码循环 然后我收到此错误消息:

ex.Message "索引和长度必须引用 字符串。\r\n参数名称:长度"字符串

请帮忙!!!

【问题讨论】:

  • 看起来它是由硬编码字符串长度 15 引起的,您将其作为 .Substring 方法的第一个参数传递。你应该把实际长度放在那里。
  • 你如何定义西班牙语文本?

标签: c# asp.net substring


【解决方案1】:

你总是从 1 到 15 - 如果TxtItem.Text 的(修剪)文本短于 15 个字符,你会得到例外。

您应该使用 sp_item 的长度为 2 作为上限以避免错误。 此外,您应该使用break 来停止 for 循环,而不是设置 i = 16

但是,我认为您的算法也可以这样编写,而不是 for 循环:

if (sp_item.IndexOf("XX")>=1) {
    k=1;
}

【讨论】:

  • 感谢回答的小伙伴
【解决方案2】:

在 c# 中,第一个位置是索引 0 而不是像 vb 那样的 1

public int Spanish_Item()
{
int i = 0;
object j = 0;
int k = 0;
string ss = null;
string sp_item = null;
sp_item = TxtItem.Text.Trim();
k = 0;
for (i = 0; i < sp_item.len-2; i++)
{
ss =  sp_item.Substring(i, 2);
if (ss == "XX")
{
k = 1;
i = 15;
}
}
return k;
}

你可以使用

if (sp_item.IndexOf("XX")>=0) {
    k=1;
}

【讨论】:

  • 感谢帮助的小伙伴
  • @GMG 该操作声明“来自旧的 VB.NET 应用程序” - 因为这是对 .NET 基础库函数的调用,所以索引也必须基于 0。但是,如果原始应用程序实际上是 VB6、VBA 或类似应用程序,那么您当然是对的。
猜你喜欢
  • 2017-07-26
  • 2018-04-06
  • 2014-11-22
  • 2012-06-24
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2020-07-20
  • 2021-11-12
相关资源
最近更新 更多