2009-05-23 17 views
13

Speriamo che questa dovrebbe essere una domanda facile. In Java penso che sia compareTo().confronto stringhe in vb

Come confrontare 2 variabili stringa per determinare se sono uguali?

cioè:

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

E 'questo "classico" vb o vb.net? –

+0

quello in Visual Web Developer 2008. vb.net presumo –

risposta

16

Io suggerirei di usare il metodo String.Compare. Usando questo metodo puoi anche decidere se farlo eseguire confronti con maiuscole e minuscole.

Esempio:

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: se si desidera eseguire una ricerca case-insensitive è possibile utilizzare il parametro StringComparison:

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

Questa risposta è inutilmente complicata. Se il caso conta, fai semplicemente "str1 = str2". Per ignorare il caso, eseguire "String.Equals (str1, str2, StringComparison.InvariantCultureIgnoreCase)". O qualsiasi variante StringComparison è appropriata per il tuo compito. Non c'è bisogno di usare 'Compare', che clutter codifica con' = 0'. E richiede al lettore di pensare un po 'di più sull'intento del codice. 'Equals' rende l'intento ovvio. Solo il tempo che userei 'Compare' è quando sono necessari valori diversi da' 0' (ordinamento). – ToolmakerSteve

+1

È interessante notare che 'String.Compare (str1, str2)' esegue il cast di 'False' quando sono uguali e' True' quando non sono uguali. – Panzercrisis

+1

@Panzercrisis mi stai dicendo!Non ho letto abbastanza questa risposta e ho fatto un sacco di = 1 pensiero = 1 cast per True ... Prenderò il consiglio di ToolmakerSteve sul decluttering usando Equals. Non lo vedo come "interessante" come hai detto tu, lo considero estremamente confuso e non intuitivo se hai mai programmato prima, dove 0 = falso e 1 = vero in quasi tutti i casi. – whyoz

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

restituisce un bool Vero. Questo confronto è case-sensitive.

Quindi nel tuo esempio,

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

questo non funziona! scusa! –

+0

L'ho preso da qui: http://msdn.microsoft.com/en-us/library/fbh501kz(VS.80).aspx –

+1

FYI, funziona benissimo - lo uso sempre. Anche se in vb.net e più recenti, si userebbe tipicamente "AndAlso" piuttosto che "And", per fare solo il secondo confronto, se necessario ("valutazione di cortocircuito"). – ToolmakerSteve

9

In vb.net si può effettivamente confrontare le stringhe con =. Anche se String è un tipo di riferimento, in vb.net = su String è stato ridefinito il confronto tra maiuscole e minuscole del contenuto delle stringhe in corrispondenza del.

È possibile verificare questo con il seguente codice. Nota che ho preso uno dei valori dall'input dell'utente per assicurarmi che il compilatore non possa usare lo stesso riferimento per le due variabili come il compilatore Java se le variabili fossero definite dalla stessa stringa Literal. Esegui il programma, digita "This" e premi <Inserisci>.

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

Questo non sembra avere molti dettagli come la risposta accettata di alcuni anni fa. Qualche ragione in particolare per postarla? –

0

So che questo è stato risposto, ma in VB.net sopra il 2013 (il più basso che ho usato personalmente) si può solo confrontare le stringhe con un operatore =. Questo è il modo più semplice.

Quindi, fondamentalmente:

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

Penso che questo String.Equals è quello che serve.

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

a restituirà falso.