我有以下输入:
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
答案 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
以及一种特定的方法来计算字符串中特定字符的出现次数。它假定格式字符串只能以已知顺序包含X
和0
。
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
的数量会变低,那么你可以根据字符串的长度制作一个条件语句