2014-12-02 3 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

+0

Вы намеренно опускаете 'Не' от первого вызова' Contains() '? – Panzercrisis

+0

Также, если задействованы новые строки, вы можете столкнуться с проблемой с 'LF' и' CRLF' (или 'LFCR'). – Panzercrisis

ответ

2

Просто используйте IndexOf на две строки, а затем использовать, если выражение

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» (Uppercase 'S'), которое ищет этот вход, используя термин «что-то», произойдет сбой при использовании Contains или vanilla IndexOf. Но с IndexOf вы могли бы написать что-то вроде этого

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

Это заставит IndexOf относиться к «что-то» и «нечто», как они одни и те же строки.

Наконец, ваш вопрос неясно, хотите ли вы проверить недостающий текст только на вторую строку или обе строки, но зная, что IndexOf возвращает> = 0, если искомая строка существует, должно быть довольно просто изменить if чтобы удовлетворить ваши потребности.

+2

Как это помогает? Подобно «Содержит», но сложнее. – Jodrell

+0

[Содержит реализован] (http://referencesource.microsoft.com/mscorlib/R/428c5c9954dea844.html) с использованием IndexOf и предположим, что StringComparison.Ordinal - то, что вы можете изменить, если вам нужно с IndexOf. Таким образом, я мог бы сказать, да, возможно, более сложный (субъективный), но, конечно, он более гибкий (объективный) – Steve

+0

с использованием 'IndexOf' более сложный, потому что вам нужно проверить результат для равенства с' -1'. Однако, поскольку вы изменили свой вопрос, чтобы сказать, что «IndexOf» имеет перегрузки, которые принимают параметр «StringComparison». Я не вижу субъективности, но это может быть субъективным. – Jodrell

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 becuase "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 ..

Что не так с кодом? Или что не так с вашими переменными и их актуальным? Или вы потеряли свои переменные где-то? Carefull верхних/нижних случаев значений и переменных имен (даже если это известно VB не все равно, избежать Megamix корпуса)

Использовать Breakpoint непосредственно перед If условие теста, а затем запустить отладчик. Посмотрите на String1 и String2 содержание.

0

Вы можете использовать vbNullString, чтобы проверить, содержит ли строка текст или нет. Попробуйте этот код:

If String1.Text = vbNullString AND String2.Text = vbNullString Then 
'do stuff 
else 
'the string is empty 
End if 
Смежные вопросы