C# 字符串拆分为数组无效
我试图将文本文件中的字符串拆分为数组,以便将它们存储在类中,但它不起作用;它不会拆分它,而是在textfile.txt中返回相同的格式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
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*?\\)");