VB.net子字符串提取求助:如何从请求参数中获取VALUE2
解决方法
先说说你现有代码的问题:
- 第二个
If判断错用了someValue,应该检查变量x是否为空 - 提取
y时调用someValue.IndexOf("="),这会拿到整个字符串里第一个=的位置,而非x内部的=位置,导致截取结果错误 - 未处理字符串开头的
?符号,虽然当前场景下第一个&的位置不受影响,但结构变化时容易出问题
方法一:用HttpUtility.ParseQueryString(推荐)
这是.NET自带的查询字符串解析工具,无需手动拆分,逻辑更可靠:
If Not String.IsNullOrEmpty(someValue) Then ' 移除开头的?(如果存在) Dim queryStr = If(someValue.StartsWith("?"), someValue.Substring(1), someValue) Dim queryParams = System.Web.HttpUtility.ParseQueryString(queryStr) Dim value2 = queryParams("MyId2") ' 此时value2即为目标值VALUE2 End If
方法二:手动拆分字符串
如果不想依赖内置工具,可修正逻辑手动处理:
If Not String.IsNullOrEmpty(someValue) Then ' 先去掉开头的? Dim cleanStr = someValue.TrimStart("?"c) ' 按&拆分所有参数项 Dim params = cleanStr.Split("&"c) ' 遍历找到目标参数 For Each param In params If param.StartsWith("MyId2=") Then Dim value2 = param.Substring("MyId2=".Length) ' 成功获取VALUE2 Exit For End If Next End If
方法三:正则表达式匹配
若偏好正则方式,也可以用匹配提取:
Imports System.Text.RegularExpressions If Not String.IsNullOrEmpty(someValue) Then Dim match = Regex.Match(someValue, "MyId2=([^&]+)") If match.Success Then Dim value2 = match.Groups(1).Value ' 这里就是目标值VALUE2 End If End If
内容的提问来源于stack exchange,提问作者Dev101684
相关产品推荐
相关产品推荐

