/ / Wie vollständig überprüfen, ob eine Zeichenfolge einem enthaltenen Wort in einer Zeichenfolge in c # entspricht? - c #, Zeichenfolge, Suche

Wie vollständig prüfen, ob eine Zeichenfolge einem in c # enthaltenen Wort entspricht? - c #, Zeichenfolge, Suche

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 № 1

Wenn 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