拆分字符串,基于格式? VB.NET

时间:2017-02-07 20:38:14

标签: vb.net api

我正在为FireText SMS服务编写一个简单的界面,我需要做的一件事就是基于响应,显示一条消息。

因此,对于此示例,我正在检查帐户中的信用数量,响应以字符串形式返回以下格式

 <status no>:<no of credits remaining> <description> - eg: 0:1652 Successful Request

我可以很好地显示,但是,我需要找到一种方法来拆分这三个部分并将它们分开存储,以便我可以根据需要使用它们,即检查状态否,然后如果0显示积分,否则显示消息?< / p>

我怎么能这样做,试图以最好的方式分割字符串?

使用的语言是VB.NET,并使用带有Post方法的WebAPI。

我是一名相当初级的程序员,为&#34;有趣&#34;做这个项目,所以我道歉,如果我的技能不是100%。

由于

4 个答案:

答案 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

参考:https://msdn.microsoft.com/en-us/library/bs2twtah(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-5

答案 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
相关问题