c# - 异常 "String cannot be of Zero length"

标签 c# string stream

我们正在尝试从文本文件中读取每个单词并将其替换为另一个单词。 对于较小的文本文件,效果很好。但对于较大的文本文件,我们不断遇到异常:“字符串长度不能为零。 参数名称:旧值“

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();
    }

我们找不到原因。 提前致谢。

最佳答案

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

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

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

关于c# - 异常 "String cannot be of Zero length",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141387/

相关文章:

javascript - 带有 ForEach 的模板文字

node.js - NodeJS 流响应以防止内存不足错误

C# 从返回 char 指针的 c++ 函数中获取字符串/字符值

c# - TotalFreeSpace 和 AvailableFreeSpace 有什么区别

java - 通用类型参数的 T、U、V 约定从何而来?

c# - 获取被点击的ListView项目属性

android - 从 addValueEventListener Firebase 中检索字符串

java - 数组递增和 i++ 问题

java - 优化使用数据压缩的 Java 服务器

node.js - 使用 Node.js 将流分块为数据 block