2016-07-07 83 views
2

我正在嘗試製作一系列完全相同長度的字符串。我正在嘗試執行以下步驟:奇怪的字符串操作問題

  1. 如果字符串超過25個字符,請修剪多餘的字符。
  2. 如果小於25,請用空格填充。
  3. 確保字符串的長度均爲25個字符。

這裏是我的代碼(或至少是相關的位)

If Len(My.Settings.currOrder1) > 25 Then 
    My.Settings.currOrder1 = Microsoft.VisualBasic.Left(My.Settings.currOrder1, 25) 
Else 
    My.Settings.currOrder1 = My.Settings.currOrder1 + "       " 
    My.Settings.currOrder1 = Microsoft.VisualBasic.Left(My.Settings.currOrder1, 25) 
End If 

這在我的頭應該工作。但是,如果我有6個字符的輸入,然後7,然後8運行代碼的3倍,輸出我得到的是這樣的:

enter image description here

這是很顯然不是縮短東西(價格只是上漲了結束顯示字符串結束的位置)。有任何想法嗎?

+0

使用try'My.Settings.currOrder1 =我的。 Settings.currOrder1.PadRight(25)'而不是添加然後修剪?它更整潔一點。但是無論如何,我認爲問題是空間佔用的空間比實際字符要少 –

+0

我同意@ProGrammer; 「PadRight」更簡單,你應該嘗試使用等寬字體來爲每個字符設置相同的寬度。 – Sehnsucht

回答

1

試試這個:

Dim str As String = "Abc" 
If str.Length < 25 Then 
    str = str.PadRight(25 - str.Length, " "C) 
Else 
    str = str.Substring(0, 25) 
End If 
+1

非常感謝,這樣簡單易行的答案。工作完美。只有我需要添加的東西,即使所有長度都相同,所得到的字符串也不會因爲字母表中不同字母的大小不同而顯示相同的大小。通過在標記價格之前在字符串之後添加製表符來處理該問題。由於所有的字符串現在都是25個字符,因此該選項卡總是出現在相同的位置。再次感謝您的幫助 – Rocks

+0

感謝您的精彩讚賞:) –

+1

通常情況下,我不會以「試試這個」開頭,但我在此提出異議。 :-) – Heinzi

0

一般來說你的VB6的做法也應該工作,但我會使用.NET:

Dim curOrder = My.Settings.currOrder1 
If curOrder.Length > 25 Then 
    My.Settings.currOrder1 = curOrder.Substring(0, 25) 
ElseIf curOrder.Length < 25 Then 
    My.Settings.currOrder1 = curOrder.PadRight(25, " "c) 
End If 
Debug.Assert(My.Settings.currOrder1.Length = 25)