2014-09-22 45 views
2

我目前在vb.net express 2013中工作。我正在使用windows窗体应用程序。我需要从一串数字中的最后一个数字中拉出第三个数字,而不会在其后面输入其他数字。我在这个网站上发现了这个问题,Get last 5 characters in a string,这非常接近我所需要的。然而,这段代码会把所有最后5个字符都拉出来,而在我的代码中,我需要第三个没有任何其他数字。例如,如果您输入数字“917408”,则需要选择“4.”。有了这个,我将根据从原始长号码返回的号码创建一个IF语句。从vb.net中的一串数字中提取一个特定的数字

 'Ghost Floor 
    If CBJob1.Visible Then 
     If Shear1.Text >= 3 Then 
      Dim ghostshear1 As String = Shear1.Text 
      Dim len = ghostshear1.Length 
      Dim result = ghostshear1.Substring(len - 3, 1) 
      MsgBox(result) 
     End If 
    End If 
+3

你只需要查看该答案并修改参数[substring](http://msdn.microsoft.com/en-us/library/system.string.substring(v = vs.110).aspx )并根据您的需要稍微修改它。 – Plutonix 2014-09-22 19:17:21

+2

字符串中的第四个数字是'myString.Chars(3)'或'myString.Substring(3,1)'。请参阅[这里](http://msdn.microsoft.com/en-us/library/aka44szs(v = vs.110).aspx)和[here](http://msdn.microsoft.com/en-us /library/system.string.chars(v=vs.110).aspx) – 2014-09-22 19:18:42

+1

'LEFT(RIGHT(string,3),1)' – RBarryYoung 2014-09-22 19:19:08

回答

2

正如罗伯特·哈维指出了上述评论,你只需要改变你的子字符串参数:

编辑:根据@ OP的关于字符串改变注释6和7之间的字符:

Dim strValue As String = "917408" 
    Dim newValue As String 

    newValue = strValue.PadLeft(7, "0").Substring(4, 1) 
    MessageBox.Show(newValue) 
+0

这实际上不起作用,因为我的电话号码在一年中的最后3个月发生变化,我们从第9个月到第10,11和12个月。我刚刚尝试了这个代码,当我们跨越门槛值如果给我不正确的号码。我需要一个从后面选择的人。 – Cheddar 2014-09-24 13:22:45

+0

@切达:查看我的修改。我添加了一个PadLeft(使用零)来确保它始终是7个字符。在这种情况下不需要长度检查。 – SnookerC 2014-09-24 14:08:08

+0

+1为padleft方法。 – 2014-09-24 14:46:12

3

要从字符串末尾开始计算特定位置的字符,您需要知道字符串的长度。这非常简单。

Dim test = "917408" 
if test.Length >= 3 then 
    Dim len = test.Length 
    Dim result = test.Substring(len - 3, 1) 
End if 

现在,你到底需要第三个字符,所以你应该添加一个检查,以避免引用的情况下,负位置的字符串小于3个字符

到解决方案中的关键是字符串类Substring方法,该方法有两个参数:

  • 起点(LEN - 3)
  • 字符返回(你的情况1)
  • 的数量
+0

我要测试这段代码,让我在我的sql测试服务器中抛出一些垃圾数据,如果它有效或没有回复你。 – Cheddar 2014-09-22 19:32:17

+0

我认为这段代码会起作用,唯一的问题是,我有一个带有这个值的文本框,它告诉我substring不能用在文本框中。检查即将发布的代码。 – Cheddar 2014-09-22 19:37:28

+1

'如果Shear1.Text.Length> = 3那么'。 WinForms或WPF中的TextBox还是? – Steve 2014-09-22 19:39:08

4

另一种方法是将字符串转换为整数,然后抓取100s列(任何数字> = 100中的倒数第三列)。

Dim strValue As String = "917408" 
Dim number As Int32 = Convert.ToInt32(strValue) 
Dim hundredsDigit As Int32 
hundredsDigit = (number/100) Mod 10 

如果您的号码已经是一个实数(而不是一个字符串),这将节省您不必将其转换为一个字符串的开始。

+0

此代码似乎工作。谢谢。 – Cheddar 2014-09-24 14:06:35

+0

没问题。只要不要忘记在那里进行一些错误检查,以防止小于100的数字(如果这是一个问题)。 – 2014-09-24 14:08:50

相关问题