From 29b083ddac7b7c42ae3a024ca13ca79d248c458e Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 13 Oct 2019 22:40:59 +0200 Subject: [PATCH] Simplify the split method Use a regexp with two groups, instead of doing some black magic manually. --- .../org/airsonic/player/util/StringUtil.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/util/StringUtil.java b/airsonic-main/src/main/java/org/airsonic/player/util/StringUtil.java index 2b459379..b0a157d9 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/util/StringUtil.java +++ b/airsonic-main/src/main/java/org/airsonic/player/util/StringUtil.java @@ -20,7 +20,6 @@ package org.airsonic.player.util; import org.apache.commons.codec.binary.Hex; -import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import java.io.*; @@ -44,6 +43,8 @@ public final class StringUtil { public static final String ENCODING_UTF8 = "UTF-8"; + private static final Pattern SPLIT_PATTERN = Pattern.compile("\"([^\"]*)\"|(\\S+)"); + private static final String[][] MIME_TYPES = { {"mp3", "audio/mpeg"}, {"ogg", "audio/ogg"}, @@ -195,16 +196,14 @@ public final class StringUtil { return new String[0]; } - Pattern pattern = Pattern.compile("\".*?\"|\\S+"); - Matcher matcher = pattern.matcher(input); - - List result = new ArrayList(); - while (matcher.find()) { - String element = matcher.group(); - if (element.startsWith("\"") && element.endsWith("\"") && element.length() > 1) { - element = element.substring(1, element.length() - 1); + List result = new ArrayList<>(); + Matcher m = SPLIT_PATTERN.matcher(input); + while (m.find()) { + if (m.group(1) != null) { + result.add(m.group(1)); // quoted string + } else { + result.add(m.group(2)); // unquoted string } - result.add(element); } return result.toArray(new String[result.size()]);