2013-04-09 57 views
1

我正在开发VB.NET窗口应用程序。在2010年VS如何从动态字符串内容获取修复子字符串?

我想要得到的子

$ CostCenterId | 4^10

从下面的字符串。

PaymentMode | NEFT^$ IsPaid |虚假^ $货币| INR印 卢比^ $ CostCenterId | 4^$ 10 LedgerId | 2^3 $

当前字符串的位置($ CostCenterId | 4^10)的顺序可能会改变。 但它会始终在两个$符号之间。 我已经写了下面的代码,但感到困惑abt接下来要写什么?

Public Sub GetSubstringData() 

    dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian 
    Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

    Dim CostIndex As Integer 
    CostIndex = sDiscription.IndexOf("CostCenterId") 
    sDiscription.Substring(CostIndex, 

    End Sub 

回答

0

为什么不$分裂()将字符串到一个数组,然后寻找其中包含CostCenterId

0

尝试是这样的元素:

Dim CostIndex As Integer 
CostIndex = sDiscription.IndexOf("CostCenterId") 

auxNum = sDiscription.IndexOf("$"c, CostIndex) - CostIndex 
sResult = sDiscription.SubString(CostIndex, auxNum) 
+0

“$”c的用法是什么? – bnil 2013-04-09 10:22:26

+0

'c'表示左边的字符必须被视为字符而不是字符串。 VB.NET的方式是直接放置字符。如果你愿意,你可以在没有这个的情况下使用它,像String一样对待它,它的工作原理是一样的。 – SysDragon 2013-04-09 10:25:59

3

看一看入Split function的一个字符串。这允许您根据指定的分隔字符将字符串拆分为子字符串。

然后你可以这样做:

Dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$" 
Debug.WriteLine("$" + sfullString.Split("$"c)(3)) 

结果:$CostCenterId|4^10

你可能会想要做一些错误检查,以确保该字符串实际上包含了你所期望虽然数据。

然而看数据,你有什么是包含键值对,所以你会更好,有一个属性来保存CostCenterId并提取这样的数据的字符串:

Public Property CostCenterId As String 

Public Sub Decode(ByVal code As String) 
    For Each pair As String In code.Split("$"c) 
     If pair.Length > 0 AndAlso pair.Contains("|") Then 
      Dim key As String = pair.Split("|"c)(0) 
      Dim value As String = pair.Split("|"c)(1) 
      Select Case key 
       Case "CostCenterId" 
        Me.CostCenterId = value 
      End Select 
     End If 
    Next 
End Sub 

然后调用它是这样的:

Decode("PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$") 
0

这应该工作:

Dim token = "$CostCenterId" 
Dim costIndexStart As Integer = sfullString.IndexOf(token) 
Dim costIndexEnd As Integer = sfullString.IndexOf("$", costIndexStart + token.Length) 
Dim cost As String = sfullString.Substring(costIndexStart, costIndexEnd - costIndexStart + 1) 

[R esult:"$CostCenterId|4^10$"

如果你想省略美元的迹象:

Substring(costIndexStart + 1, costIndexEnd - costIndexStart - 1) 
0

你的字符串,

Dim xString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

子串的过程,

xString = xString.Substring(xString.IndexOf("$CostCenter"), xString.IndexOf("$", xString.IndexOf("$CostCenter") + 1) - xString.IndexOf("$CostCenter")) 
0

试试这个代码:

Dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian" _ 
    & "Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

     Dim sp() As String = {"$"} 
     Dim ar() As String = sfullString.Split(sp, StringSplitOptions.RemoveEmptyEntries) 
     Array.Sort(ar) 
     MsgBox("$" & ar(0)) 
相关问题