【问题标题】:Exception "String cannot be of Zero length"异常“字符串不能为零长度”
【发布时间】:2012-02-26 19:44:42
【问题描述】:

我们正在尝试从文本文件中读取每个单词并将其替换为另一个单词。 对于较小的文本文件,它运行良好。但是对于较大的文本文件,我们不断收到异常:“字符串长度不能为零。 参数名称:oldValue"

void replace()
    {
        string s1 = " ", s2 = " ";
        StreamReader streamReader;
        streamReader = File.OpenText("C:\\sample.txt");
        StreamWriter streamWriter = File.CreateText("C:\\sample1.txt");
        //int x = st.Rows.Count;
        while ((line = streamReader.ReadLine()) != null)
        {
            char[] delimiterChars = { ' ', '\t' };
            String[] words = line.Split(delimiterChars);
            foreach (string str in words)
            {
                s1 = str;
                DataRow drow = st.Rows.Find(str);
                if (drow != null)
                {
                    index = st.Rows.IndexOf(drow);
                    s2 = Convert.ToString(st.Rows[index]["Binary"]);
                    s2 += "000";                                        
                   // Console.WriteLine(s1);
                   // Console.WriteLine(s2);
                    streamWriter.Write(s1.Replace(s1,s2)); // Exception occurs here
                }
                else
                    break;
            }
        }
        streamReader.Close();
        streamWriter.Close();
    }

我们无法找到原因。 提前致谢。

【问题讨论】:

  • 按空格分割时可能会得到一个空字符串。检查你是否没有任何地方有两个连续的空格字符。
  • 以后,请包含异常的堆栈跟踪,如果可能,请指出引发异常的行。这通常可以快速确定问题的根源,而不是让人们不得不分析您的程序来找出问题所在。

标签: c# string stream


【解决方案1】:

发生异常是因为s1 在某些时候是一个空字符串。您可以通过替换行来避免这种情况

String[] words = line.Split(delimiterChars);

用这个:

String[] words = line.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);

【讨论】:

    【解决方案2】:

    您想像这样更改您的拆分方法调用:

    String[] words = line.Split(delimiterChars,StringSplitOptions.RemoveEmptyEntries);
    

    【讨论】:

      【解决方案3】:

      当您执行string.Split 时,如果顺序中有多个空格或制表符,您可能会得到空条目。这些不能被替换,因为字符串的长度为 0。

      使用 StringSplitOptions 参数去除空结果的重载:

      var words = line.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
      

      【讨论】:

        【解决方案4】:

        这意味着 s1 包含一个空字符串 (""),如果您的文件中有两个连续的空格或制表符,就会发生这种情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-12
          相关资源
          最近更新 更多