我正在尝试解析字符串,看看“:”之后的值是否为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))
{
}
}
答案 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。顺便说一句,你需要测试它。
希望这有帮助。
问候。