2016-07-07 108 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)