2016-12-20 211 views
2

我有以下的输入的字符串:替换格式字符串

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

如何我INV取代XXXXX56取代00000

对于上面的例子,结果应该是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

看起来像我的功课。要求*作业帮助的问题*必须包括您迄今为解决问题所做的工作的摘要,以及您解决问题的难度的描述。 – Spidey

+0

到目前为止你做了什么? –

+1

帮你一个忙,并打开Option Strict – Plutonix

回答

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

如蜘蛛提到...显示一些代码。这就是说你描述的过程有点冗长。

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

数字部分可以用类似的方法完成。你的int实际上是你的代码中的一个字符串。如果它是一个真正的整数,你可以将它转换为字符串。使用Right(int,5)。检查一遍,看你有5位数字,如果不与0

适当数量的前面加上一展......如果你遇到问题,发布您的代码,准有人来帮助。

UPDATE

由于有过在这里贴实际的答案是我的解决方案

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 
0

此样本

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

看看我们假设X只有3。我不想给你更多这是一个开始,一切都会很容易。

如果一种格式是固定我的意思是X数量会或下跌,那么你可以基于字符串