繁体   English   中英

string.Split()和if语句

[英]string.Split() and an if statement

我有一个文本文件,我用\\n分割。

文本文件(测试)读取

1
2
3
4

现在令人困惑的部分。

string test = System.IO.File.ReadAllText(@"C:\Custom tests\"+testselect.Text+".txt");

string[] check = test.Split('\n');

if (check[0] == "1")
{
     label.Text = "whatever";
}

这不起作用。 标签保持默认值。 但如果我:

label.Text = check[0];

标签显示1。

我不明白这请帮忙。

首先 - 您应该能够使用File.ReadAllLines而不是阅读文本和拆分....

您可能需要修剪结果。 如果行上有额外的空格,则条件可能会失败。 尝试使用:

if (check[0].Trim() == "1")
{

这将削减任何空格,这将导致条件成功。

您还可以放入断点,并检查调试器中的值。 这有助于您更好地诊断问题。

我相信你应该使用Environment.NewLine。 不同的操作系统使用不同的换行符。

所有操作系统的通用换行符是什么? (LF和CR)

你只是在比较数字吗? 需要检查案例和空白..

string.Equals(check[0].Trim(), "some value", StringComparison.OrdinalIgnoreCase);

你可以使用这样的东西:

如果有的话,删除退货

string[] check = test.Replace("\r", "").Split('\n');

        if(check[0] == "1")

或者用新行拆分并获取数组中的字符并检查它。

string[] check = test.Split('\n');

        if(check[0][0] == '1')

我会使用选项二。

编辑:

或类似的东西,但它有点OTT,你得到所有的\\ r \\ n

 char[] check = test.SplitMeUp();

        if(check[0] == '1')


 static class Extensions
{
    public static char[] SplitMeUp(this string str)
    {
        char[] chars = new char[str.Length];
        for (int i = 0; i < chars.Length; i++)
            chars[i] = str[i];

        return chars;
    }
}

编辑:

过滤掉特定字符的其他内容

public static char[] SplitMeUp(this string str, char[] filterChars = null)
    {
        List<Char> chars = new List<char>();
        for (int i = 0; i < str.Length; i++)
        {
            if(filterChars != null && filterChars.Length > 0 && filterChars.Contains(str[i]))
                    continue; 

            chars.Add(str[i]);
        }

        return chars.ToArray();
    }

并使用它

char[] check = test.SplitMeUp(new char[] {'\r', '\n'});

        if(check[0] == '1')

它将忽略所有这些\\ r \\ n并将所有内容分开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM