System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置

时间:2022-06-12 10:50:27
代码如下:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    string[] oper={"+","-","*","/","="};
    string[] var = { "x", "Fa", "y", "z", "m", "Tc" };
    int m = 0;


    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {

    }
  


protected void  Button2_Click(object sender, EventArgs e)
{
    string formular = TextBox1.Text;
    string strvar = "";
    string[] arr3=new string[10];
    GetVar(formular, oper, var,arr3);
    for (int i = 0; i < arr3.Length; i++)
    {
        
        if (arr3[i] != null && arr3[i] != "")
        {
            strvar += arr3[i] + ",";
        }
       

    }
    strvar = strvar.Substring(0, strvar.LastIndexOf(","));
    this.TextBox2.Text = strvar;
}
    /// <summary>
    ///获取变量 
    /// </summary>
    /// <param name="str">公式</param>
    /// <param name="arr1">操作符</param>
    /// <param name="arr2">变量</param>
    /// <returns></returns>
public void GetVar(string str,string[] arr1,string[] arr2,string[] arr3)
{
     arr3 = new string[10];
    


    for(int i=0;i<str.Length;i++)
    {
        for (int j = 0; j < arr1.Length;j++ )
        {
            if (str.Substring(i,1) == arr1[j])
            {
               string befstr = str.Substring(0, i);
               string aftstr = str.Substring(i+1,str.Length-befstr.Length-1);
                for (int x = 0; x < arr2.Length; x++)
                {
                    if (befstr == arr2[x])
                    {
                        arr3[m] = befstr;
                        m++;

                    }
                }
                str = aftstr;
                GetVar(str, arr1, arr2, arr3);

            }
            else
            {
                continue;
                
            }
        }
       
     }

    
 

}
}
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    string[] oper={"+","-","*","/","="};
    string[] var = { "x", "Fa", "y", "z", "m", "Tc" };
    int m = 0;


    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {

    }
  


protected void  Button2_Click(object sender, EventArgs e)
{
    string formular = TextBox1.Text;
    string strvar = "";
    string[] arr3=new string[10];
    GetVar(formular, oper, var,arr3);
    for (int i = 0; i < arr3.Length; i++)
    {
        
        if (arr3[i] != null && arr3[i] != "")
        {
            strvar += arr3[i] + ",";
        }
       

    }
    strvar = strvar.Substring(0, strvar.LastIndexOf(","));
    this.TextBox2.Text = strvar;
}
    /// <summary>
    ///获取变量 
    /// </summary>
    /// <param name="str">公式</param>
    /// <param name="arr1">操作符</param>
    /// <param name="arr2">变量</param>
    /// <returns></returns>
public void GetVar(string str,string[] arr1,string[] arr2,string[] arr3)
{
     arr3 = new string[10];
    


    for(int i=0;i<str.Length;i++)
    {
        for (int j = 0; j < arr1.Length;j++ )
        {
            if (str.Substring(i,1) == arr1[j])
            {
               string befstr = str.Substring(0, i);
               string aftstr = str.Substring(i+1,str.Length-befstr.Length-1);
                for (int x = 0; x < arr2.Length; x++)
                {
                    if (befstr == arr2[x])
                    {
                        arr3[m] = befstr;
                        m++;

                    }
                }
                str = aftstr;
                GetVar(str, arr1, arr2, arr3);

            }
            else
            {
                continue;
                
            }
        }
       
     }

    
 

}
}
 运行到这一步if (str.Substring(i,1) == arr1[j])
时出错?望高手解答啊?

7 个解决方案

#1


加个断点,看下str是什么,是否为空?

#2


if(str.Length>i)
 str=str.Substring(i,1) ;

#3


引用 2 楼 wuyq11 的回复:
if(str.Length>i)
 str=str.Substring(i,1) ;
非常感谢你的回答,现在又在     
strvar = strvar.Substring(0, strvar.LastIndexOf(","));
出现问题,
长度不能小于 0。
参数名: length 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentOutOfRangeException: 长度不能小于 0。
参数名: length

源错误: 


行 47:     
行 48:     
行 49:     strvar = strvar.Substring(0, strvar.LastIndexOf(","));
行 50:     this.TextBox2.Text = strvar;
行 51: }
 

#4


if(strvar.LastIndexOf(",") > -1)
  strvar = strvar.Substring(0, strvar.LastIndexOf(","));

#5


引用 4 楼 peter200694013 的回复:
if(strvar.LastIndexOf(",") > -1)
  strvar = strvar.Substring(0, strvar.LastIndexOf(","));
再次谢谢你的答复,现在运行没有错误,但是我预期是要获取到公式中的变量,如2*x+sin(3*x+y)运行呢后把x,y获取出来赋值,但现在运行后得不到变量?谢谢诶

#6


现在运行后的结果是原始字符串string strvar = "";的值,以下这个循环就没有执行
if (arr3[i] != null && arr3[i] != "")
  {
  strvar += arr3[i] + ",";
  }

#7


怎么解决啊,着急啊!!!!!!

#1


加个断点,看下str是什么,是否为空?

#2


if(str.Length>i)
 str=str.Substring(i,1) ;

#3


引用 2 楼 wuyq11 的回复:
if(str.Length>i)
 str=str.Substring(i,1) ;
非常感谢你的回答,现在又在     
strvar = strvar.Substring(0, strvar.LastIndexOf(","));
出现问题,
长度不能小于 0。
参数名: length 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentOutOfRangeException: 长度不能小于 0。
参数名: length

源错误: 


行 47:     
行 48:     
行 49:     strvar = strvar.Substring(0, strvar.LastIndexOf(","));
行 50:     this.TextBox2.Text = strvar;
行 51: }
 

#4


if(strvar.LastIndexOf(",") > -1)
  strvar = strvar.Substring(0, strvar.LastIndexOf(","));

#5


引用 4 楼 peter200694013 的回复:
if(strvar.LastIndexOf(",") > -1)
  strvar = strvar.Substring(0, strvar.LastIndexOf(","));
再次谢谢你的答复,现在运行没有错误,但是我预期是要获取到公式中的变量,如2*x+sin(3*x+y)运行呢后把x,y获取出来赋值,但现在运行后得不到变量?谢谢诶

#6


现在运行后的结果是原始字符串string strvar = "";的值,以下这个循环就没有执行
if (arr3[i] != null && arr3[i] != "")
  {
  strvar += arr3[i] + ",";
  }

#7


怎么解决啊,着急啊!!!!!!