我有以下输入:
Dim str_format as string = "XXXXX00000"
Dim str as string = "INV"
Dim int as integer = "56"
如何将 XXXXX
替换为 INV
并将 00000
替换为 56
?
对于上面的示例,结果应为 INVXX00056
。
str
超过五个字母,则X
只能用字母替换,0只能用整数替换。多余的字母将被丢弃,因为 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
最佳答案
正如蜘蛛侠提到的...显示一些代码。也就是说,您描述的过程有点冗长。
解决方案的字母部分可以通过使用 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
关于string - 将字符串替换为格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238052/