Heim >Java >javaLernprogramm >Wie teile ich eine Zeichenfolge durch Leerzeichen auf und ignoriere Leerzeichen in Anführungszeichen?

Wie teile ich eine Zeichenfolge durch Leerzeichen auf und ignoriere Leerzeichen in Anführungszeichen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 02:07:09659Durchsuche

How to Split a String by Spaces, Ignoring Spaces Within Quotes?

Aufteilen von Zeichenfolgen mit Leerzeichen, die nicht in Anführungszeichen eingeschlossen sind

In diesem Zusammenhang suchen wir nach einer Lösung, um eine Zeichenfolge mithilfe von Leerzeichen in Komponenten zu unterteilen nicht in einfache oder doppelte Anführungszeichen gesetzt. Dies ist eine differenzierte Aufgabe, die eine sorgfältige Regex-Erstellung erfordert.

Eine effektive Lösung besteht darin, einen Regex zu erstellen, der zwei Arten von Elementen erfasst:

  1. Anführungszeichenketten:Sequenzen Anzahl der Zeichen in einfachen oder doppelten Anführungszeichen, ohne interne Anführungszeichen.
  2. Ohne Anführungszeichen Wörter: Zeichenfolgen, die keine Leerzeichen oder Anführungszeichen enthalten.

Um diese Elemente abzugleichen, können wir den folgenden regulären Ausdruck verwenden:

[^\s"']+|"([^"]*)"|'([^']*)'

In diesem regulären Ausdruck:

  • [^\s"'] : Treffer ohne Anführungszeichen Wörter.
  • |"([^"]*)"|: Entspricht Zeichenfolgen in doppelten Anführungszeichen, mit Ausnahme der Anführungszeichen.
  • |'([^']*)'|: Entspricht Zeichenfolgen in einfachen Anführungszeichen Zeichenfolgen in Anführungszeichen, ohne Anführungszeichen.

Bei der Implementierung dieser Lösung in Java können wir Folgendes verwenden Code:

Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);

List<String> matchList = new ArrayList<>();
while (regexMatcher.find()) {
    if (regexMatcher.group(1) != null) {
        // Double-quoted string without quotes
        matchList.add(regexMatcher.group(1));
    } else if (regexMatcher.group(2) != null) {
        // Single-quoted string without quotes
        matchList.add(regexMatcher.group(2));
    } else {
        // Unquoted word
        matchList.add(regexMatcher.group());
    }
}

Dieser Ansatz erfasst geschickt beide Arten von Elementen und bietet eine robuste Lösung für das gegebene Problem.

Das obige ist der detaillierte Inhalt vonWie teile ich eine Zeichenfolge durch Leerzeichen auf und ignoriere Leerzeichen in Anführungszeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn