如何在C#中搜索字符串中的字符串?

时间:2017-07-11 22:32:18

标签: c#

我有以下字符串,其中我试图获取StatusCode:值,输出应该是409 ..我尝试如下但不起作用,这是正确的方法吗?< / p>

string output = 'QLASR: Bad Response Conflict StatusCode: 409, ReasonPhrase: 'Improper Software Product Build Name already present in the database', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Pragma: no-cache Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Cache-Control: no-cache Date: Tue, 11 Jul 2017 22:18:26 GMT Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Length: 68 Content-Type: text/plain; charset=utf-8 Expires: -1 }'

output.Any(x => x.Equals(StatusCode))

4 个答案:

答案 0 :(得分:2)

您不应该首先使用此字符串。这是一个improperly read HttpResponseMessage。有些代码在某处发出HTTP请求,从那里你可以调用访问响应的StatusCode属性:

httpClient = new HttpClient();
var response = await httpClient.GetAsync("...");

var statusCode = response.StatusCode;

答案 1 :(得分:0)

const string statusCodeIdentifier = "StatusCode:";
var outputWithoutSpaces = output.Replace(" ", "");
var statusCodeIndex = outputWithoutSpaces.IndexOf(statusCodeIdentifier);
var parsedCode = outputWithoutSpaces.Substring(statusCodeIndex + statusCodeIdentifier.Length, 3);

不是最漂亮的,这假设状态代码总是3位数。但假设你的字符串总是这种格式,它应该可以工作。

您在评论中提到输出应该是JSON。虽然你的示例字符串中的情况并非如此。如果它实际上是JSON,那么我会使用Newtonsoft.JSON来反序列化对象并以这种方式处理它。它更容易管理。

答案 2 :(得分:0)

您可以找到StatusCode:的索引,使用该索引并查找该索引中的子字符串到,的索引(您必须使用StatusCode:的长度来获取价值)

答案 3 :(得分:0)

正则表达式似乎是最好的选择。

int statusCode = 0;
string output = 'QLASR: Bad Response Conflict StatusCode: 409, ...'
string pattern = @"StatusCode\:\s?(\d+)";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(output);
if (m.Success)
{
     statusCode = (int)m.Groups[1].Value;
     Debug.WriteLine(statusCode);
}

此正则表达式查找&#39; StatusCode&#39;后跟一个冒号,后跟一个空格(或不是空格),后跟多个数字。 括号允许您对事物进行分组。

因此,当执行此正则表达式时,它会匹配您的输出并找到&#39; StatusCode:409&#39;。然后,我们使用包含括号内的值的组1来获取所需的状态代码。 (组0 =整场比赛;所以那将是&#39; StatusCode:409&#39;)

tbh ,您的输出&#39;看起来像HttpClient的响应代码。 我确信响应的StatusCode属性可以公开访问。