2017-02-09 46 views
0

我不確定我是否實際使用VB.net。我正在使用Visual Basic 2010 express,我不知道這是否是相同的事情。爲什麼替換函數刪除我的字符串的一部分?

我正在使用替換函數來替換0中的特定位置的字符串與大量0與1我使用可選參數,讓您選擇在字符串函數開始搜索人物。但是每當它做到這一點時,它會在我告訴它去到字符串中的位置之前刪除字符串的所有部分。

那麼我能做些什麼來讓它像以前一樣返回整個字符串,但只是在那個位置改變了那個字符。代碼行是:

board = Replace(board, "0", "1", position, 1) 
+0

如果你想在一個位置替換字符,爲什麼不使用mid?:'Mid(board,position,1)=「1」' – Pikoh

+0

'爲什麼不只是:'board = board.Insert(0,「1 「) – Hackerman

+0

@Pikoh感謝編輯我的回答到您的評論 –

回答

3

出於某種奇怪的原因String.Replace返回字符串從位置用N替代品。

從MSDN:

的替換返回值函數是通過查找指定的開始於由啓動指定的位置,並在表達式字符串的結尾結束,與由替換字符串和替換值。

但是如果你使用一個StringBuilder

Dim sb As New StringBuilder(board) 
sb = sb.Replace("0", "1", position, 1) 
board = sb.ToString 

它按預期工作。

我有一個偷偷摸摸的懷疑是微軟的一個錯誤,他們從來沒有修復它,因爲它會影響所有已經在使用它的人。

+1

感謝編輯@Bugs我仍然在學習如何格式化正確的東西。 –

+2

不是一個錯誤,而是設計的行爲。 String.Replace從VB6替換函數繼承此功能,請參閱https://msdn.microsoft.com/zh-cn/library/aa241892(v=vs.60).aspx。 – MarkL

+0

雅我知道@MarkL,但我有一種感覺,這是MS部分的一個非常古老的錯誤。特別是因爲他們改變了它的工作方式,以及你對新字符串構建器的期望。誰在正確的思想中會直觀地期望搜索和替換功能從索引位置截斷。不幸的是,如果這是一個錯誤,那就是你無法修復現有代碼的問題。所以它有效地成爲「一個功能」 –

0

還有另一種方法可用它做了你需要叫什麼Mid,你可以閱讀更多關於here

它用於像這樣:

Mid(board, position, 1) = "1" 

要知道,「開始是一個基於」

相關問題