2016-12-20 286 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數量會或下跌,那麼你可以基於字符串