diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java index 7a009b66a0..8077bbf2c0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java @@ -213,28 +213,28 @@ public static List tokenize(String str) { // Split the string with ' and space cleverly. ArrayList parts = new ArrayList<>(); - boolean inside = false; StringBuilder current = new StringBuilder(str.length()); - for (int i = 0; i < str.length(); i++) { + for (int i = 0; i < str.length(); ) { char c = str.charAt(i); - switch (c) { - case '\'': - case '"': { - inside = !inside; - break; + if (c == '\'' || c == '"') { + int end = str.indexOf(c, i + 1); + if (end < 0) { + end = str.length(); } - case ' ': - if (!inside) { - parts.add(current.toString()); - current.setLength(0); - break; - } - // fallthrough - default: - current.append(c); + current.append(str, i + 1, end); + i = end + 1; + } else if (c == ' ') { + if (current.length() > 0) { + parts.add(current.toString()); + current.setLength(0); + } + i++; + } else { + current.append(c); + i++; } } - if (current.length() != 0) { + if (current.length() > 0) { parts.add(current.toString()); } diff --git a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/TokenizerTest.java b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/TokenizerTest.java index 47704314f9..9cc6befb3a 100644 --- a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/TokenizerTest.java +++ b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/TokenizerTest.java @@ -24,5 +24,9 @@ public void textTokenizer() { "Text without quote", "Text", "without", "quote" ); + test( + "Text with multiple spaces", + "Text", "with", "multiple", "spaces" + ); } }