如果长度发生变化,从字符串中获取某些值的最简单方法是什么

本文关键字:获取 是什么 方法 最简单 字符串 变化 如果 | 更新日期: 2023-09-27 18:00:06

我有返回用户代理信息的代码。我想找到写MSIE 10.0的部分,如果它写了,那么就把Internet Explorer 10.0写入日志文件。有没有一种方法可以在没有正则表达式的情况下做到这一点?如果需要的话,我会使用它们,而且我不知道这个字符串是否总是相同的长度,所以我认为子字符串不会是一致的。

浏览器:Mozilla/5.0(兼容;MSIE 10.0;Windows NT 6.1;三叉戟/6.0;SLCC2。NET CLR 2.0.50727。NET CLR 3.5.30729。净CLR3.0.30729;Media Center PC 6.0。NET4.0C。NET4.0E)

这是返回字符串的代码:

var js = driver as IJavaScriptExecutor;
const string script = "return navigator.userAgent"; // get the user agent
if (js != null)
{
    var userAgent = (string) js.ExecuteScript(script);
    Logger.Log(Loglevel.Debug, "Brower: {0}", userAgent);
}

如果长度发生变化,从字符串中获取某些值的最简单方法是什么

您可以简单地调用Contains来检查指定的字符串是否包含另一个字符串:

if (userAgent.Contains("MSIE 10.0")){
    ...
}

System.String提供了Contains方法,如果您正在搜索的特定字符串存在于调用Contains的字符串中,则该方法将返回true。

如果你想避免在日志语句中对浏览器版本进行硬编码,你仍然可以使用带IndexOf的Substring来获取值。。。以下代码将记录:"Browser:InternetExplorer10.0",假设userAgent的值为

"Mozilla/5.0(兼容;MSIE 10.0;Windows NT 6.1;Trident/6.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;.NET4.0C;.NET4.0E)"

        if (userAgent.Contains("MSIE"))
        {
            int index = userAgent.IndexOf("MSIE") + 5; // + length of("MSIE ")
            int length = userAgent.IndexOf(';', index) - index;
            Logger.Log(Loglevel.Debug, "Browser: Internet Explorer {0}",
                userAgent.Substring(index, length)); 
        }    

第一个IndexOf将通过"MSIE"后面的空格检索userAgent的索引。第二个IndexOf使用该索引作为查找下一个分号的起点;这两个指数差的长度。此时,Substring调用将在userAgent字符串中返回与MSIE相关联的版本号。

您可以尝试使用字符串。对用户代理字符串的Contains()调用。

bool contains = userAgent.Contains("MSIE 10.0");
if(contains)
{
  //whatever
}

简单,没有正则表达式。我在一些不同的项目中使用它,效果不错。但如果你正在寻找的字符串发生了变化,请注意误报。

if(userAgent.Contains("MSIE 10.0"))
      File.AppendAllText("Logfilepath","InternetExplorer 10.0");