字符串拆分成数组不起作用

时间:2012-04-20 19:11:23

标签: c#

我正在尝试将字符串从文本文件拆分为数组,以便我可以将它们存储在类中但它不起作用;它没有拆分它,它在textfile.txt中返回相同的格式

using (StreamReader reader = new StreamReader("textfile.txt"))
{
  string line;
  while ((line = reader.ReadLine()) != null)
  {
    char[] delimiters = new char[] { '\t' };
    string[] parts = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < parts.Length; i++)
    {
      MessageBox.Show(parts[i]);
    }

  }
}

文本文件包含:

George\t15\tStudent\tAddress\tB:\temp\profilepic.png

我希望它看起来像这样(分裂后):

George
15
Student
Address
profilepic.png

任何想法或帮助表示赞赏。

4 个答案:

答案 0 :(得分:6)

“\ t”是一个特殊字符,意思是“tab”。如果您想实际查找字符串\t,则需要使用"\\t"@"\t"。你也不需要把它变成char数组;字符串有一个重载。

答案 1 :(得分:1)

您应该使用"\\t"作为拆分字符串。你应该得到:
乔治
15个
学生
地址
B:
EMP \ profilepic.png

不 的 profilepic.png

编辑:"\\t"在我的回答中显示为"\t"

答案 2 :(得分:1)

使用你提供的样本行,我认为你可以得到的最接近的可能是使用以下正则表达式,也许如果你玩这个你可以让它不给你路径,或者你可以在你的循环中做检查路径并跳过它,这应该告诉您它是否是路径[a-zA-Z]:\\\w*?\\

string[] results = Regex.Split(line, @"(?<!B:)\\t|(?<=B:\\\w*?\\)");

它生成此列表:

  • 乔治
  • 15
  • 学生
  • 地址
  • B:\ TEMP \
  • profilepic.png

答案 3 :(得分:0)

您遇到的问题是Escape Sequences。以&#39; \&#39;开头的字符组合被认为是逃逸序列,它们的行为与常规字符串不同。从链接表中可以看到,&#39; \t&#39;表示水平制表符。所以在C#中你使用&#39; \t&#39;作为分隔符,它会查找水平制表符,但是您的明文具有实际的字符序列&#39; \t&#39;在它,这是你正在寻找的。

接下来的问题是,如何找到&#39; \t&#39;如果当我将它用作分隔符时,它会搜索水平制表符?答案也显示在链接中; &#39; \\&#39;表示&#39; \&#39; (如果你想一想,那就必要了,否则你怎么能找到&#39; \(anything)&#39;。所以你的分隔符必须是&#39; \\t&#39;。< / p>

(应该注意你也可以用字符串做这个,而不把所有东西都变成一个字符数组,原则仍然存在)