我正在尝试将字符串从文本文件拆分为数组,以便我可以将它们存储在类中但它不起作用;它没有拆分它,它在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
任何想法或帮助表示赞赏。
答案 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*?\\)");
它生成此列表:
答案 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>
(应该注意你也可以用字符串做这个,而不把所有东西都变成一个字符数组,原则仍然存在)