11

我有一个读取分隔文件的函数。

分隔符通过字符串参数传递给函数。问题是,当我通过"\t"分隔符时,它最终会像这样"\\t",因此,Split 无法找到这个序列。

我该如何解决这个问题?

private void ReadFromFile(string filename, string delimiter)
{

        StreamReader sr = new StreamReader(filename, Encoding.Default);
        string[] firstLine = sr.ReadLine().Split(t.ToCharArray());

        .......
 }
4

6 回答 6

36

我猜你正在使用类似的东西

string sep = @"\t";

在这种情况下,sep 将保留\\t双反斜杠

利用string sep = "\t"

string content = "Hello\tWorld";
string sep = "\t";
string[] splitContent = content.Split(sep.ToCharArray());
于 2012-09-12T09:31:27.277 回答
9

为此使用单个引号,例如 Split('\t'),这样您将传递一个字符而不是字符串。

于 2012-09-12T09:22:03.243 回答
2

将参数值作为 \t (tab) 的十进制数传递并转换为 Char。

 int delimeter =9;

 // 9  ==> \t 
 // 10 ==> \n
 // 13 ==> \r

 char _delimeter = Convert.ToChar(delimeter);

 string[] rowData = fileContent.Split(_delimeter);

快乐编程。

于 2015-02-05T15:42:24.297 回答
1

如果您传入“\t”作为分隔符,则不会将其更改为“\t”。其他东西正在双重逃避您的标签。

    Blah("\t");
    private static void Blah(string s)
    {
        var chars = s.ToCharArray();
        Debug.Assert(chars.Length == 1);

        var parts = "blah\tblah\thello".Split(chars);            
        Debug.Assert(parts.Length == 3);
    }
于 2012-09-12T09:31:57.930 回答
0

进行拆分的另一种方法是以这种方式将 TAB(\t) 替换为空格:

            if(linea.ToLower().Contains(@"\t"))
                linea = linea.Replace(@"\t", " ");
            retVal = linea.Trim().Split(' ')[1];

这段代码对我有用。

于 2014-11-25T22:23:59.437 回答
-5

你尝试过:Environment.NewLine 吗?

于 2012-09-12T09:29:25.703 回答