2014-12-02 192 views
-1
If String1.Contains("something") AndAlso String2.'does not contain something' 
    'do stuff 
End If 

有沒有簡單的方法來做到這一點?我試着檢查一個字符串是否不包含一些文字

If String1.Contains("something") AndAlso Not String2.Contains("something else") 
    'do stuff 
End If 

但它不工作...

+0

你是什麼意思,它不起作用?你是否建議'String.Contains'或'Not'的實現存在問題? 'String2'的價值是什麼,我懷疑你的情況有所不同。 – Jodrell 2014-12-02 17:47:02

+0

您是否有意忽略從第一次調用'Contains()'? – Panzercrisis 2014-12-02 17:56:41

+0

此外,如果涉及到換行符,您可能會遇到'LF'與'CRLF'(或'LFCR')的問題。 – Panzercrisis 2014-12-02 17:58:19

回答

2

只需使用的IndexOf在兩個字符串,然後使用if表達

Dim pos1 = String1.IndexOf("something") 
Dim pos2 = String2.IndexOf("something else") 

if pos1 < 0 AndAlso pos2 < 0 then 
    ' the string1 doesn't contain "something" and string2 doesn't contain "something else" 
End If 

string.IndexOf返回作爲參數傳遞的字符串的字符位置。如果在源字符串中找不到參數,則返回值爲-1,如MSDN docs

中所解釋的,如果您的搜索項包含與輸入字符串不同的大小寫字符,IndexOf也可能很有用。例如,如果您的輸入文本包含單詞「Something」(大寫'S'),則使用術語「something」搜索此輸入將使用Contains或vanilla IndexOf都失敗。 但隨着的IndexOf你可以寫這樣的事情

Dim pos1 = String1.IndexOf("something", StringComparison.CurrentCultureIgnoreCase) 
Dim pos2 = String2.IndexOf("something else", StringComparison.CurrentCultureIgnoreCase) 

這將迫使的IndexOf像他們一樣的字符串處理「東西」和「東西」。

最後,你的問題還不清楚,如果你想檢查丟失的文本只有第二個字符串或兩個字符串,但知道IndexOf返回> = 0如果搜索字符串存在,那麼它應該很簡單,修改if滿足您的需求。

+2

這有什麼幫助?像「Contains」一樣,但更復雜。 – Jodrell 2014-12-02 17:47:36

+0

[Contains is implemented](http://referencesource.microsoft.com/mscorlib/R/428c5c9954dea844.html)使用IndexOf並假設StringComparison.Ordinal,如果您需要使用IndexOf,則可以更改這些內容。所以我可以說,是的可能更復雜(主觀),但肯定它更靈活(客觀) – Steve 2014-12-02 18:08:55

+0

使用'IndexOf'更復雜,因爲您需要測試結果與'-1'是否相等。然而,正如你已經修改你的問題所說的那樣,'IndexOf'確實有接受'StringComparison'參數的重載。我沒有看到主觀性,但這可能是主觀的。 – Jodrell 2014-12-03 09:20:45

4

沒關係,我們有一個字符串,

Dim someString = "this something that" 

表達

someString.Contains("something") 

評估爲True。表達式

someString.Contains("something else") 

評估爲False。表達式

Not someString.Contains("something else") 

評估爲True


注:

表達

someString.Contains("Something") 

評估爲False監守"Something"失敗"something"序區分大小寫的比較。除非另有規定,字符串比較是序號區分大小寫。


有關如何做一個文化/箱/正常化敏感擴大答案包含操作用繩子,see my answer here

0
Dim String1 As String = "This one contains something at index 18" 
Dim String2 As String = "You won't find your string here !" 

Debug.WriteLine("String1 : IndexOf(something) = " _ 
    + String1.IndexOf("something").ToString()) 
Debug.WriteLine("String2 : IndexOf(something else) = " _ 
    + String1.IndexOf("something else").ToString()) 

If String1.Contains("something") AndAlso Not String2.Contains("something else") Then 
    Debug.WriteLine("String1 contains [something]") 
    Debug.WriteLine("String2 doesn't contain [something else]") 
End If 

上面的代碼輸出:

'String1 : IndexOf(something) = 18 
'String2 : IndexOf(something else) = -1 
'String1 contains [something] 
'String2 doesn't contain [something else] 

Not就在前面String.Contains(blah)加法肯定裝置the String doesn't contain [blah]。我沒有看到Not Contains有什麼問題..

你的代碼出了什麼問題?或者你的變量和他們的實際內容有什麼問題?還是你失去了跟蹤變量的地方?上部小心/小寫的值和變量名(即使它被稱爲VB不關心,避免外殼megamix)

使用Breakpoint之前你If條件測試,然後運行 調試器。看看String1String2內容。

0

您可以使用vbNullString檢查字符串是否包含文本。試試這個代碼:

If String1.Text = vbNullString AND String2.Text = vbNullString Then 
'do stuff 
else 
'the string is empty 
End if 
相關問題