我正在为FireText SMS服务编写一个简单的界面,我需要做的一件事就是基于响应,显示一条消息。
因此,对于此示例,我正在检查帐户中的信用数量,响应以字符串形式返回以下格式
<status no>:<no of credits remaining> <description> - eg: 0:1652 Successful Request
我可以很好地显示,但是,我需要找到一种方法来拆分这三个部分并将它们分开存储,以便我可以根据需要使用它们,即检查状态否,然后如果0显示积分,否则显示消息?< / p>
我怎么能这样做,试图以最好的方式分割字符串?
使用的语言是VB.NET,并使用带有Post方法的WebAPI。
我是一名相当初级的程序员,为&#34;有趣&#34;做这个项目,所以我道歉,如果我的技能不是100%。
由于
答案 0 :(得分:0)
这似乎工作正常 - 当然您可能需要根据需要更改结构和功能中的数据类型。
Structure Account
Dim StatusNumber As Integer
Dim CreditsRemaining As Integer
Dim Description As String
End Structure
Private Function DecodeResult(resultString As String) As Account
Dim splitstring() As String = Split(resultString, ">")
DecodeResult.StatusNumber = CInt(Split(splitstring(0), "<")(1))
DecodeResult.CreditsRemaining = CInt(Split(splitstring(1), "<")(1))
DecodeResult.Description = Split(splitstring(2), "<")(1)
End Function
Private Sub btnEvaluate_Click(sender As Object, e As EventArgs) Handles btnEvaluate.Click
Dim x As Account = DecodeResult(result)
Console.WriteLine(x.StatusNumber)
Console.WriteLine(x.CreditsRemaining)
Console.WriteLine(x.Description)
End Sub
答案 1 :(得分:0)
这使用正则表达式,就像前面的例子一样,但我认为人们对你的例子中的字符串格式感到困惑。此代码基于您的示例
0:1652成功申请
函数ProcessAccountResponse
返回一个对象,您可以轻松访问所需的值。
确保导入Imports System.Text.RegularExpressions
Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim retObj As AccountResponse = ProcessAccountResponse("0:01652 Successful Request")
Console.WriteLine("Status Number: " + retObj.StatusNumber.ToString())
Console.WriteLine("Number of Credits: " + retObj.CreditsRemaining.ToString())
Console.WriteLine("Description: " + retObj.Description)
End Sub
Private Function ProcessAccountResponse(response As string) As AccountResponse
Const regrPattern As String = "(\d):(\d*) (.*)"
Dim match As Match = Regex.Match(response, regrPattern, RegexOptions.IgnoreCase)
If(match.Success) Then
Return New AccountResponse With {.StatusNumber = match.Groups(1).Value, .CreditsRemaining = match.Groups(2).Value, .Description = match.Groups(3).Value}
Else
'// Not a valid response
End If
End Function
Public Class AccountResponse
Public Property StatusNumber As Integer
Public Property CreditsRemaining As Integer
Public Property Description As string
End Class
答案 2 :(得分:-1)
使用正则表达式匹配,捕获&lt;之间的内容。和&gt;迹象。 创建一个Windows窗体(Form1,Textbox1,Listbox1,Button1)并尝试下面的代码:
notesArr.length - 1
答案 3 :(得分:-1)
我只是拆分然后使用扩展方法来获取带有Linq扩展名的'ToDictionary'。这是一个简单的控制台应用程序。你想要得到的是“良好的形成”似乎并且你可能想要这样的东西:
Key: Value
这是一个字典,它是一个不重复某事物的键及其价值的集合。在下面的代码中,我提供了一些有意义的数据作为一个例子,当它被提取出一点点不同于你的。您有时可能会有空箱,但出于示例的目的,我选择了数据。基本上我是
一个。使用s作为变量制作模型
B中。在s之后使用扩展方法首先获取第一个字符后的所有内容的子字符串,以便不具有“&lt;”分裂。
℃。拆分“&lt;”将字符串放入字符串列表中。
d。执行'ToDictionary'和'Function(x)'只是lambda语法,基本上处理变量x,就像它是列表中的字符串一样。基本上我说'给我一切“&gt;”'给一把钥匙,把所有东西放在右边。“
Sub Main()
Dim s = "<status no>123<no of credits remaining>0<description>0:1652 Successful Request"
Dim split = s.Substring(1, Len(s) - 1).Split("<").ToDictionary(Function(x) x.Substring(0, x.IndexOf(">")), Function(x) x.Substring(x.IndexOf(">") + 1, Len(x) - x.IndexOf(">") - 1))
split.ToList().ForEach(Sub(x) Console.WriteLine($"{x.Key} {x.Value}"))
Console.ReadLine()
End Sub