帮助解析字符串

时间:2011-07-18 18:24:45

标签: c#

我正在尝试解析字符串,看看“:”之后的值是否为Integer。如果它不是整数,则从字符串中删除“Test:M”。

以下是我的示例字符串。

string testString = "Test:34,Test:M";

我需要testString = "Test:34"

的结果
string[] data = testString.Split(',');
for (int i = 0; i < data.Length; i++)
{
    string[] data1 = data[i].Split(':');
    int num = 0;
    if(Int32.TryParse(data1[1], out num))
    {

    }
}

5 个答案:

答案 0 :(得分:5)

你快到了。试试这个:

    var builder = new StringBuilder();
    string[] data = testString.Split(',');
    for (int i = 0; i < data.Length; i++)
    {
        string[] data1 = data[i].Split(':');
        int num = 0;
        if(Int32.TryParse(data1[1], out num))
        {
            builder.Append(data[i]);
            buidler.Append(',');
        }
    }

    testString = builder.ToString();

编辑:添加","以保留输出中的逗号...

编辑:采取@Groo建议避免隐式字符串连接。

答案 1 :(得分:4)

你可以继续使用循环结构,但我个人认为LINQ的外观更好一点:

var dummy = 0;

var intStrings =
    testString.Split(',')
        .Where(s => s.Contains(":") && int.TryParse(s.Split(':')[1], out dummy))
        .ToArray();

var result = String.Join(",", intStrings);

答案 2 :(得分:2)

您可以使用所需的值构建一个新的集合......

string testString = "Test:34,Test:M, 23:test";

int temp = default( int );

var integerLines =  from line in testString.Split( ',' )
                    let value = line.Split( ':' ).ElementAt( 1 )
                    let isInteger = Int32.TryParse( value, out temp )
                    where isInteger
                    select line;

答案 3 :(得分:1)

        string testString = "Test:34,Test:M,Crocoduck:55";
        string[] data = testString.Split(',');
        for (int i = 0; i < data.Length; i++)
        {
            string s = data[i].Remove(0, data[i].IndexOf(':') + 1);
            int num;
            if (Int32.TryParse(s, out num))
            {
                Console.WriteLine(num);
            }
        }

答案 4 :(得分:0)

我应警告我手上没有编码工具,所以无法为您提供 显然可编辑的代码,但在其他方面,我建议使用Split(string []),例如:Split(new string [] {“,”,“:”})并避免调用拆分2次。在此之后,您将清楚地看到数组的哪些索引是整数。在你的例子中,它应该是每N * 3。顺便说一句,你需要测试它。

希望这有帮助。

问候。