2009-05-23 2 views
13

Надеюсь, это должен быть простой вопрос. В java я думаю, что это compareTo().Сравнение строк в vb

Как сравнить 2 строковые переменные, чтобы определить, являются ли они одинаковыми?

т.е.

If (string1 = string2 And string3 = string4) Then 
    'perform operation 
Else 
    'perform another operation 
End If 
+0

Это этот «классический» vb или vb.net? –

+0

тот, что есть в визуальном веб-разработчике 2008. vb.net Я принимаю – 2009-05-23 05:35:53

ответ

16

Я бы предложил использовать метод String.Compare. Используя этот метод, вы также можете контролировать, следует ли ему выполнять проверки с учетом регистра или нет.

Пример:

Dim str1 As String = "String one" 
Dim str2 As String = str1 
Dim str3 As String = "String three" 
Dim str4 As String = str3 

If String.Compare(str1, str2) = 0 And String.Compare(str3, str4) = 0 Then 
    MessageBox.Show("str1 = str2 And str3 = str4") 
Else 
    MessageBox.Show("Else") 
End If 

Edit: если вы хотите, чтобы выполнить поиск без учета регистра можно использовать параметр StringComparison:

If String.Compare(str1, str2, StringComparison.InvariantCultureIgnoreCase) = 0 And String.Compare(str3, str4, StringComparison.InvariantCultureIgnoreCase) = 0 Then 
+3

Этот ответ излишне сложный. Если дело имеет значение, просто выполните «str1 = str2». Чтобы игнорировать случай, выполните «String.Equals (str1, str2, StringComparison.InvariantCultureIgnoreCase)». Или любой вариант StringComparison подходит для вашей задачи. Не нужно использовать 'Compare', который помещает код с' = 0'. И требует, чтобы читатель немного подумал о намерении кода. «Равно» делает цель очевидной. Только время, которое я использовал бы «Compare», это когда нужны значения, отличные от '0' (сортировка). – ToolmakerSteve

+1

Интересно, что 'String.Compare (str1, str2)' приписывает 'False', когда они равны, и' True', когда они не равны. – Panzercrisis

+1

@Panzercrisis ты говоришь мне!Я не читал в этом ответе достаточно и сделал тонну = 1 мышления = 1 отбрасывает True ... Я собираюсь взять совет ToolmakerSteve о том, чтобы разрешить использование Equals. Я не считаю это «интересным», как вы сказали, я воспринимаю его как чрезвычайно запутанный и неинтуитивный, если вы когда-либо кодировали раньше, где 0 = false и 1 = true почти во всех случаях. – whyoz

11
Dim MyString As String = "Hello World" 
Dim YourString As String = "Hello World" 
Console.WriteLine(String.Equals(MyString, YourString)) 

возвращает логическое значение True. Это сравнение чувствительно к регистру.

Таким образом, в вашем примере,

if String.Equals(string1, string2) and String.Equals(string3, string4) then 
    ' do something 
else 
    ' do something else 
end if 
+0

это не работает! Прости! – 2009-05-23 05:43:27

+0

Я получил его отсюда: http://msdn.microsoft.com/en-us/library/fbh501kz(VS.80).aspx –

+1

FYI, он отлично работает - я использую его все время. Хотя в vb.net и новее обычно используют «AndAlso», а не «And», чтобы делать только второе сравнение, если необходимо («оценка короткого замыкания»). – ToolmakerSteve

9

В vb.net вы можете сравнивать строки с =. Несмотря на то, что String является ссылочным типом, в vb.net = по адресу String было переопределено, чтобы сравнить регистр содержимого двух строк.

Вы можете проверить это на следующий код. Обратите внимание, что я взял одно из значений из пользовательского ввода, чтобы убедиться, что компилятор не может использовать одну и ту же ссылку для двух переменных, таких как компилятор Java, если бы переменные были определены из одного и того же строкового литерала. Запустите программу, введите «Это» и нажмите < Введите >.

Sub Main() 
    Dim a As String = New String("This") 
    Dim b As String 

    b = Console.ReadLine() 

    If a = b Then 
     Console.WriteLine("They are equal") 
    Else 
     Console.WriteLine("Not equal") 
    End If 
    Console.ReadLine() 
End Sub 
-3
If String.Compare(string1,string2,True) Then 

    'perform operation 

EndIf 
+0

Это, похоже, не так подробно, как принятый ответ от нескольких лет назад. Любая конкретная причина для публикации? –

0

Я знаю, что это был дан ответ, но в VB.net выше 2013 (самый низкий я лично использовал), можно просто сравнить строки со = оператора. Это самый простой способ.

Так в основном:

If string1 = string2 Then 
    'do a thing 
End If 
0

Я думаю, что это String.equals является то, что вам нужно.

Dim aaa = "12/31" 
      Dim a = String.Equals(aaa, "06/30") 

a вернется false.