从 string
读取结果的最佳方法是什么? 只需要解析字符串,它是从Web服务返回的
"RESULT: FAILED
RESULT_CODE: 944
RRN: 313434415392
APPROVAL_CODE: 244447
CARD_NUMBER: 4***********3412";
我可以使用mystring.split(' ')
,但我认为这不是一个好主意。
答案 0 :(得分:5)
您可以使用LINQ构建字典:
string s =
@"RESULT: FAILED
RESULT_CODE: 944
RRN: 313434415392
APPROVAL_CODE: 244447
CARD_NUMBER: 4***********3412";
IDictionary<string, string> result = s
.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Select(line => line.Split(':'))
.ToDictionary(x => x[0].Trim(), x => x[1].Trim());
然后按键查询结果:
Console.WriteLine(result["RRN"]);
会给你313434415392
。
或者,如果您想要获取所有键和值,只需循环:
foreach (var item in result)
{
Console.WriteLine("key: {0}, value: {1}", item.Key, item.Value);
}
答案 1 :(得分:2)
string text = @"RESULT: FAILED
RESULT_CODE: 944
RRN: 313434415392
APPROVAL_CODE: 244447
CARD_NUMBER: 4***********3412";
using (StringReader reader = new StringReader(text))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var values = line.Split(':');
if (values.Length > 1 && values[0].Trim() =="RESULT")
{
var found = values[1].Trim(); // this is the value you want
break;
}
}
}
答案 2 :(得分:1)
你能用split(“\ n”)吗?
答案 3 :(得分:1)
var regex = new Regex(@"(RESULT:)[a-zA-Z0-9\t .]+");
string text = @"RESULT: FAILED
RESULT_CODE: 944
RRN: 313434415392
APPROVAL_CODE: 244447
CARD_NUMBER: 4***********3412";
MatchCollection matches = regex.Matches(text);
foreach (Match m in matches)
{
string values = m.Value;
}
我不确定你是否试图避免循环,也许你的数据集相当大。这里提供的解决方案的替代方案是找到与正则表达式的匹配。我相信你可以拿出完美的正则表达式来匹配你的数据集,但是这个应该在RESULT上很好地匹配包含字母和数字的行尾,尽管我认为如果它们是特殊字符则需要进行调整包含在数据集中。下面应该让你知道我的意思;
答案 4 :(得分:0)
创建一个实体(类)并返回其实例。
public class ReturnValues
{
public string Result {get; set;}
public string return_Code
// Other properties
}