用格式字符串替换字符串

时间:2016-12-20 08:46:05

标签: string vb.net replace

我有以下输入:

Dim str_format as string = "XXXXX00000"
Dim str as string = "INV"
Dim int as integer = "56"

如何将XXXXX替换为INV并将00000替换为56

对于上面的示例,结果应为INVXX00056

X只能用字母替换,0只能用整数替换,如果str有超过五个字母。额外的字母将被丢弃,因为str_format只有五个X。对于整数,同样的算法也是如此。

示例2

Dim str_format as string = "XXX00000"
Dim str as string = "ABCD"
Dim int as integer = 654321

预期结果:ABC54321

过程:

1. ABCD XXX00000 654321
2. ABC DXX000006 54321
3. AB CDX00065 4321
4. A BCD00654 321
5. ABC06543 21
6. ABC65432 1
7. ABC54321

3 个答案:

答案 0 :(得分:2)

正如Spidey所说......显示一些代码。那说你描述的过程有点啰嗦。

解决方案中的Letter部分可以通过使用Left(str,3)抓取str的前3个字符来完成,这将带来最左边的3个字符(如果有更少的话会得到那里的东西)。然后使用str.Length()检查您有3个字符。如果长度小于3,则附加适当数量的' X'。

数字部分可以以类似的方式完成。你的int实际上是上面代码中的一个字符串。如果它是一个真正的整数,你可以将它强制转换为字符串。使用Right(int,5)。再次检查您是否有5位数字,如果没有前缀,则使用适当的数字0。

快走......如果你遇到问题,发布你的代码就会有人帮忙。

<强>更新

由于此处发布的实际答案是我的解决方案

Function FormatMyString(str As String, num as String) As String

    Dim result As String

    result = Left(str,3).PadRight(3, "X"c).ToUpper() & Right(num,5).PadLeft(5, "0"c)

    Return result

End Function

更新2

基于Wiktors的回答......修改了我的解决方案,以应对不同的格式

Function FormatMyString(str As String, num as String, alpha as Integer, digits as Integer) As String

    Dim result As String

    result = Left(str, alpha).PadRight(alpha, "X"c).ToUpper() & Right(num, digits).PadLeft(digits, "0"c)

    Return result

End Function

To use... 
FormatMyString("ABCDE", "56",3 5) will return ABC00056
FormatMyString("ABCDE", "123456",4 3) will return ABCD456
FormatMyString("AB", "123456",4 3) will return ABXX456

答案 1 :(得分:1)

这是一个可能的解决方案,它只使用基本的字符串方法和PadLeft / PadRight以及一种特定的方法来计算字符串中特定字符的出现次数。它假定格式字符串只能以已知顺序包含X0

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
    Return value.Count(Function(c As Char) c = ch)
End Function

Public Sub run1()
    Dim str_format As String = "XXXXX00000" '"XXX00000"
    Dim str As String = "INV"
    Dim int As Integer = 56 '  ABC54321
    Dim xCnt As Integer = CountCharacter(str_format, "X")
    Dim zCnt As Integer = CountCharacter(str_format, "0")
    Dim result As String
    If xCnt > str.Length Then
        result = str.PadRight(xCnt, "X")
    Else
        result = str.Substring(0, xCnt)
    End If
    If zCnt > int.ToString().Length Then
        result = result & int.ToString().PadLeft(zCnt, "0")
    Else
        result = result & int.ToString().Substring(int.ToString().Length-zCnt
    End If
    Console.WriteLine(result)    
End Sub

两种情况的输出都符合预期。

答案 2 :(得分:0)

看一下这个样本

Dim str_format As String = str_format.Replace("XXX", "ABC")
Msgbox(str_format )

我们假设X仅为3。我不想给你更多它是一个开始,一切都会很容易。

如果这种格式是固定的,我的意思是X的数量会变低,那么你可以根据字符串的长度制作一个条件语句