2014-09-22 38 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

相關問題