C# 字符串拆分为数组无效

C# 字符串拆分为数组无效,c#,C#,我试图将文本文件中的字符串拆分为数组,以便将它们存储在类中,但它不起作用;它不会拆分它,而是在textfile.txt中返回相同的格式 using (StreamReader reader = new StreamReader("textfile.txt")) { string line; while ((line = reader.ReadLine()) != null) { char[] delimiters = new char[] { '\t' }; stri

我试图将文本文件中的字符串拆分为数组,以便将它们存储在类中,但它不起作用;它不会拆分它,而是在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]);
    }

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

感谢您的任何想法或帮助。

“\t”是一个特殊字符,表示“tab”。如果要实际查找字符串
\t
,则需要使用
“\\t”
@“\t”
。您也不需要将其设置为字符数组;字符串有一个重载。

“\t”是一个特殊字符,表示“tab”。如果要实际查找字符串
\t
,则需要使用
“\\t”
@“\t”
。您也不需要将其设置为字符数组;字符串有一个重载。

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

不是 profilepic.png

编辑:
“\\t”
在我的回答中显示为
“\t”
您应该使用
“\\t”
作为拆分字符串。你应该得到:
乔治
15
学生
地址
B:
emp\profilepic.png

不是 profilepic.png


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

您遇到的问题是。以“
\
”开头的字符组合被视为转义序列,它们的行为与常规字符串不同。从链接中的表格中可以看到,
\t
”表示水平选项卡。因此,当在C语言中使用“
\t
”作为分隔符时,它会查找水平制表符,但是您的纯文本中有实际的字符序列“
\t
”,这就是您要查找的

然后问题就变成了,如果当我使用“
\t
”作为分隔符时,它搜索水平制表符,我如何找到它?答案也显示在链接中;'
\
'是“
\
”的表示形式(如果您仔细考虑,它是必需的,否则您怎么能查找“
\(任何东西)
”。因此您的分隔符必须是“
\\t


(请注意,您也可以使用字符串来实现这一点,而无需将所有内容都转换为字符数组,这一原则仍然适用)这里的问题在于。以“
\
”开头的字符组合被视为转义序列,它们的行为不同于常规字符串。从链接中的表中可以看出,“
\t
”表示水平制表符。因此,在C中使用“
\t
”作为分隔符时,它会寻找一个horizontal选项卡,但您的纯文本中有实际的字符序列“
\t
”,这就是您要查找的

然后问题就变成了,如果我使用“
\t
”作为分隔符搜索水平制表符,我如何找到它?答案也显示在链接中;“
\
”是“
\
”的表示形式(如果你仔细想想,这是必要的,否则你怎么能找到“
\”(任何东西)
”。因此您的分隔符必须是“
\\t


(请注意,您也可以使用字符串来实现这一点,而无需将所有内容都转换为字符数组,这一原则仍然适用)

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

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

string[]results=Regex.Split(第行,@”(?使用您提供的示例行,我认为您可以得到的最接近的结果可能是使用以下正则表达式,如果您使用此正则表达式,您可以让它不给您路径,或者,在循环中,您可以检查路径并跳过它,这应该告诉您它是否是路径。
[a-zA-Z]:\\\w*?\

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

string[]results=Regex.Split(第行,@”(?您是否真的在文件中看到了
\t
,或者您只是将其放在那里以进行文本表示?您的文本文件中是否真的有所有这些
\t
?或者这只是显示文本文件包含选项卡的一种方式?您是否真的在文件中看到了
\t
,或者您只是将其放在那里以进行文本表示?是否您的文本文件中确实包含所有这些
\t
?或者这只是显示文本文件包含选项卡的一种方式吗?请注意路径的“B:\t”部分,除了“B:”和“emp\profilepic.png”注意路径的“B:\t”部分,除了“B:”和“emp\profilepic.png”确实如此。这是一个格式不正确的提要文件。嗯,我肯定认为它的格式不正确。显然,提要文件的目的是生成制表符分隔的数据;也很明显,这不是实际情况。也许…:)但至少可以解析…;)而不是使用
拆分
,除非您想要连接最后2个(或3个或4个)数组中的元素。确实如此。这是一个格式不正确的提要文件。好吧,我肯定认为它格式不正确。似乎很明显,提要文件的目的是生成制表符分隔的数据;也很明显不是这样的。可能…:)但至少它可以被解析…;)而不是使用
拆分
,除非您想连接最后2个(或三个,或四个)数组中的元素。感谢您的解释,现在可以更好地理解了。不过,我只遇到一个问题,我收到的错误消息是:错误1字符文本中的字符太多。如何解决此问题?@Unknowner发生这种情况,因为“\\t”是2个字符,它不适合一个字符。您需要将字符删除器更改为字符串分隔rators(你应该从其他人的评论中注意到,当你这样做时,你会从temp中丢失t)感谢你的解释,现在有更好的理解。我只得到了
string[] results = Regex.Split(line, @"(?<!B:)\\t|(?<=B:\\\w*?\\)");