Vielleicht ist die Frage etwas verwirrt. Ich werde das besser erklären Schau dir diesen Code an
string myfirststring = "hello1,hello123,content";
string_2 = "ent";
if (myfirststring.Contains(string_2)){
Console.WriteLine("Yes! this is included in the 1 string");
//then check if string_2 is equal to the 3 element of 1 string: content
}
Jetzt möchte ich überprüfen, ob meine enthaltene Zeichenfolge enthalten ist"string_2" ist völlig gleich dem Element 3 von myfirststring: content (in diesem Fall nicht, weil der Wert ent und nicht der Inhalt so ent! = content ist) Wie kann ich das überprüfen?
Antworten:
5 für die Antwort № 1Wenn die Wörter durch Kommas getrennt sind, können Sie Folgendes tun:
var exactlyContained = myFirstString.Split(",").Any(w => w == string_2);
Dies wird zurückkehren true
wenn es einen findet genaue Übereinstimmung, false
in jedem anderen Fall.
AKTUALISIEREN
Basierend auf Kommentaren scheint es, als hätte Ihre Zeichenfolge dies getanWörter, die durch unterschiedliche Folgen von Symbolen begrenzt sind. Vielleicht könnten Sie diese benutzerdefinierte Aufteilungsmethode verwenden (Sie könnten sie an Ihre speziellen Bedürfnisse anpassen, ich habe nicht viele Informationen, die Sie verwenden können):
public static IEnumerable<string> CustomSplit(this string s)
{
var buffer = new StringBuilder();
foreach (var c in s)
{
if (!char.IsLetterOrDigit(c))
{
if (buffer.Length > 0)
{
yield return buffer.ToString();
buffer.Clear();
}
}
else
{
buffer.Append(c);
}
}
if (buffer.Length > 0)
yield return buffer.ToString();
}
Und jetzt wäre der Code:
var exactlyContained = myFirstString.CustomSplit().Any(w => w == string_2);
1 für die Antwort № 2
Da für Ihre Zeichenfolge kein Trennzeichen festgelegt wurde, würde ich nach der Beispielzeichenfolge alle Zeichen ohne Buchstaben reduzieren und Ihre Zeichenfolge neu erstellen myFirstString
.
string myFirstString = "hello1,hello123,content";
string yourSecondString = "ent";
Zuerst definiere ich ein Trennzeichen, das ich am Ende noch trennen muss.
char delimiter = "#";
Jetzt erstelle ich ein neues StringBuilder
um die gefundenen Zeichen effizient hinzuzufügen und das Zeichen festzulegen, das überprüft werden soll, wenn die Wörter mit einem Nichtbuchstabenzeichen enden.
var firstStringBuilder = new StringBuilder();
char previousChar = delimiter;
Nach der Vorbereitung durchlaufe ich alle Zeichen in der Zeichenfolge und füge alle Zeichen der Zeichenkette hinzu StringBuilder
und reduzieren Sie alle Zeichen, die keine Buchstaben sind, auf ein einzelnes Trennzeichen zwischen den Wörtern.
foreach (char singleChar in myFirstString)
{
if (Char.IsLetterOrDigit(singleChar))
{
firstStringBuilder.Append(singleChar);
previousChar = singleChar;
}
else if(Char.IsLetterOrDigit(previousChar))
{
firstStringBuilder.Append(delimiter);
previousChar = singleChar;
}
}
Nachdem ich die Schleife beendet habe, prüfe ich, ob ein Wort passt yourSecondString
bool matched = firstStringBuilder.ToString()
.Split(delimiter)
.Any(str => string.Equals(str, yourSecondString));
1 für die Antwort № 3
Ich weiß, dass es aus Performance-Gründen im Allgemeinen verpönt ist, aber Regex macht dies zu einer relativ einfachen Suche, wenn Sie sich immer mit einem einzelnen Wort (und nicht mit einem Satz usw.) befassen.
// regex "b" indicates a word boundary, so surrounding your lookup string with them ensures your expression matches the entire word
if (Regex.IsMatch(myfirststring, $"b{string_2}b")){
Console.WriteLine("Yes! this is included in the 1 string");
//then check if string_2 is equal to the 3 element of 1 string: content
}
BEARBEITEN: Fehlende Schließklammer hinzugefügt if
Erklärung