17 Stimmen

String nach String.indexof in c# abrufen

Ich entwickle derzeit eine Anwendung in C#, wo ich die Teilzeichenfolge nach einem bestimmten Zeichen innerhalb der Zeichenfolge erhalten müssen.

else if (txtPriceLimit.Text.Contains('.') && char.IsNumber(e.KeyChar))
{
    int index = txtPriceLimit.Text.IndexOf('.');
    string pennies = txtPriceLimit.Text.Substring(index, txtPriceLimit.Text.Length);
    Console.WriteLine("Pennies: " + pennies);
}

Aus irgendeinem Grund erscheint immer wieder eine IndexOutOfRangeException . Wie kann ich den Inhalt der Zeichenkette vom Index bis zum Ende erhalten?

Danke für jede Hilfe, die Sie anbieten können.

EDIT: Ich habe gerade festgestellt, dass die verschiedenen Dinge, die ich ausprobiert habe und die vorgeschlagen wurden, zu funktionieren scheinen, außer dass der Wert der zuletzt gedrückten Taste nicht in das Textfeld übernommen wird. Ich bin mit der KeyPress Event, um dies zu tun.

Wenn ich zum Beispiel .123 eingebe, wird nur 12 gedruckt. Wenn ich dann 4 am Ende hinzufüge, wird 123 gedruckt.

0voto

coarist Punkte 669

VisualBasic-Version

Code, um einen Teilstring zu finden, der, wenn er gefunden wird, den hinteren Teil zurückgibt - den Rest der Zeichenkette unmittelbar hinter dem gefundenen Teilstring (hinter dem Ende).

jp2code Die Antwort hat mir auf elegante Art und Weise geholfen. Neben den Beispielen wies der Autor auch darauf hin, dass der Code im Laufe der Zeit gut erprobt und getestet wurde. VisualBasic Äquivalent seines/ihres Codes:

Imports System.Runtime.CompilerServices

Module StringExtensions
    <Extension()>
    Public Function TextFollowing(txt As String, value As String) As String
        If Not String.IsNullOrEmpty(txt) AndAlso Not String.IsNullOrEmpty(value) Then
            Dim index As Integer = txt.IndexOf(value)
            If -1 < index Then
                Dim start As Integer = index + value.Length
                If start <= txt.Length Then
                    Return txt.Substring(start)
                End If
            End If
        End If
        Return Nothing
    End Function
End Module

Der Code wurde getestet mit VS Gemeinschaft 2017 .

Beispiel für die Verwendung

Dim exampleText As String = "C-sharp to VisualBasic"
Dim afterCSharp = exampleText.TextFollowing("to")
'afterCSharp = " VisualBasic"

Die Erweiterungsmethode TextFollowing() ist jetzt verfügbar für String Objekte.

  1. Zeile 1: exampleText es String und daher ist unsere Erweiterungsmethode verfügbar
  2. Zeile 2: exampleText.TextFollowing() verwendet die Erweiterungsmethode

Ergänzende Methode

Es kann nützlich sein, die ergänzende Methode zu haben - den vorangehenden Teil der Zeichenkette zu erhalten. Die komplementären Erweiterungsmethoden werden geschrieben und in einem kombinierten Codemodul zusammengefasst:

Imports System.Runtime.CompilerServices

Module StringExtensions
    <Extension()>
    Public Function TextFollowing(txt As String, value As String) As String
        If Not String.IsNullOrEmpty(txt) AndAlso Not String.IsNullOrEmpty(value) Then
            Dim index As Integer = txt.IndexOf(value)
            If -1 < index Then
                Dim start As Integer = index + value.Length
                If start <= txt.Length Then
                    Return txt.Substring(start)
                End If
            End If
        End If
        Return Nothing
    End Function
    <Extension()>
    Public Function TextPreceding(txt As String, value As String) As String
        If Not String.IsNullOrEmpty(txt) AndAlso Not String.IsNullOrEmpty(value) Then
            Dim index As Integer = txt.IndexOf(value)
            If -1 < index Then
                Return txt.Substring(0, index)
            End If
        End If
        Return Nothing
    End Function
End Module

Beispiel für die Verwendung

Dim exampleText As String = "C-sharp to VisualBasic"
Dim beforeVisualBasic = exampleText.TextPreceding("to")
'beforeVisualBasic = "C-sharp "

In meinem Anwendungsfall ist es notwendig zu prüfen, ob LargeString.Contains(SmallString) bevor Sie diese Erweiterungsmethoden anwenden. Für eine schnellere Codeausführung hätte man dies mit den oben vorgestellten Erweiterungsmethoden kombinieren können, was ich aber nicht getan habe. Der Grund dafür ist, dass keine Verlangsamung auftritt und daher die Wiederverwendbarkeit des Codes im Vordergrund steht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X