帮助进行字符串解析

本文关键字:字符串 帮助 | 更新日期: 2023-09-27 18:02:21

我试图解析字符串,看看":"之后的值是否为整数。如果不是整数,则从string中删除"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))
    {
    }
}

帮助进行字符串解析

你就快成功了。试试这样:

    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();

EDIT:添加","以保留输出中的逗号…

EDIT:参考@Groo关于避免隐式字符串连接的建议

你可以继续使用循环结构,但我个人更喜欢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);

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

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;
        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);
            }
        }

我应该提醒你,我手头没有编码工具,所以不能提供给你明确可编译的代码,但在不同的其他我建议使用Split(string[]),例如:Split(new string[]{",",":"}),并避免调用Split 2次。在此之后,您将清楚地看到数组的哪些索引是整数。在你的例子中,它应该是每N*3。顺便说一下,你需要测试一下。

希望对你有帮助。

问候。