【问题标题】:C# Detecting null characters in a string arrayC#检测字符串数组中的空字符
【发布时间】:2012-06-22 16:59:38
【问题描述】:

我正在使用 StreamReader 从文本文件中读入字符串数组 text[]。文本文件中的其中一行在数组的位置 1 -> 20 中被读取为"\0"。我将如何检测这个空字符并忽略这一行。

代码示例:

StreamReader sr = new StreamReader(Convert.ToString(openFileDialog1.FileName));
while (!sr.EndOfStream)
{
    string l= sr.ReadLine();
    string[] parsedLine = l.Split(new char[] { '=' },StringSplitOptions.RemoveEmptyEntries);
    // Not working:
    if (parsedLine.Length == 0)
    {
        MessageBox.Show("Ignoring line");
    }

任何帮助都会很棒!

【问题讨论】:

  • 你不能只做if(l.contains("/0"){l.replace("/0","");}
  • line 在那里做什么你还没有在任何地方定义它是l 吗??
  • 对不起。 line 应该是 l。错字。
  • @Duane。这不起作用,因为'\0 被视为空字符,而不是一系列字符“\0”
  • @L337BEAN 是的,不是 100% 确定,所以没有将其发布为答案

标签: c# arrays streamreader


【解决方案1】:

假设您的意思是一个带有 ascii 代码的字符:0

   if (parsedLine.Length == 0 || parsedLine[0] == '\0')continue;

编辑 如果 parsedLine 是一个字符串,则上述内容将起作用,但对于您的代码中的解析:

    string[] parsedLine = l.Split(new char[] { '=' },StringSplitOptions.RemoveEmptyEntries)
                      .Where(s=>s.Length != 1 || s[0] != '\0').ToArray();

【讨论】:

  • 不起作用。运算符“==”不能应用于“字符串”和“字符”类型的操作数
  • @L337BEAN 哎呀,抱歉,没有正确读取,认为 parsedLine 是一个读入字符串,为字符串数组添加了一个 linq 替代方案。
  • 这在一定程度上是有效的。现在的问题是它每次都从字符串中删除所有内容。例如,如果l 在您的代码行之后包含H/0e/0l/0l/0o/0,它会将l 传递给parsedLine 作为""。我想保留hello
  • 嗯,这可能是由于日志文件中的空间。生病检查它。
  • @L337BEAN 因此,删除所有出现的 \0 比删除仅输入 \0 的条目更重要?在这种情况下,您可以使用 l = l.Replace("\0", " ") 替换为空格或 l = l.Replace("\0", "");完全删除它们。这可行吗?
【解决方案2】:

如果它包含空字符,则忽略该行。

string l = sr.ReadLine();
if (string.IsNullOrEmpty(l) || l[0] == '\0'))
   continue;
...

【讨论】:

    【解决方案3】:

    这是一个应该可以工作的 linq 解决方案:

    StreamReader sr = new StreamReader(Convert.ToString(openFileDialog1.FileName));
    while (!sr.EndOfStream)
    {
        string l= sr.ReadLine();
        bool nullPresent = l.ToCharArray().Any(x => x.CompareTo('\0') == 0);
    
        if (nullPresent)
        {
            MessageBox.Show("Ignoring line");
        }
        else
        {
            // do other stuff
        }
    }
    

    【讨论】:

      【解决方案4】:

      使用内置的String.IsNullOrEmpty()方法:

      if (!string.IsNullOrEmpty(l))
      {
          // your code here
      }
      

      【讨论】:

      • 要忽略的行可以包含其他字符。
      • @brunocondeq - 那些是什么角色?根据 MSDN 文档,它将忽略空字符和空字符串。
      【解决方案5】:
      string l= sr.ReadLine();
      if (l == "") {
        MessageBox.Show("Ignoring line");
        continue;
      }
      

      【讨论】:

      • 要忽略的行可以包含其他字符。
      • 这不起作用。 string does not contain a definition for 'isEmpty'我是否缺少程序集参考或其他内容?
      • 他的意思可能是string.IsNullOrEmpty("string")
      • @L337BEAN 我错过了,在 C# 中,l == "" 可以用于测试空字符串。
      猜你喜欢
      • 2023-04-02
      • 2014-07-16
      • 2013-05-01
      • 2016-10-12
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2020-10-30
      相关资源
      最近更新 更多