From 80e33ba01bb5a3e4146fae9cc09c8181ba5b54fe Mon Sep 17 00:00:00 2001 From: SiboVG Date: Mon, 6 Mar 2023 19:55:35 +0100 Subject: [PATCH] Refactor string utils to common class --- .../importt/SingleSimulationHandler.java | 4 +- .../preset/loader/DoubleUnitColumnParser.java | 4 +- .../loader/LineMaterialColumnParser.java | 4 +- .../preset/loader/MassColumnParser.java | 4 +- .../preset/loader/MaterialColumnParser.java | 4 +- .../loader/RockSimComponentFileLoader.java | 4 +- .../loader/SurfaceMaterialColumnParser.java | 4 +- .../openrocket/simulation/FlightDataType.java | 4 +- .../customexpression/CustomExpression.java | 8 +-- .../customexpression/RangeExpression.java | 7 ++- .../simulation/extension/impl/JavaCode.java | 6 +-- .../src/net/sf/openrocket/unit/UnitGroup.java | 4 +- .../{StringUtil.java => StringUtils.java} | 29 ++++++++++- .../sf/openrocket/util/StringUtilTest.java | 52 +++++++++---------- .../file/SimulationTableCSVExport.java | 2 +- .../thrustcurve/MotorInformationPanel.java | 2 +- .../net/sf/openrocket/utils/StringUtils.java | 33 ------------ 17 files changed, 84 insertions(+), 91 deletions(-) rename core/src/net/sf/openrocket/util/{StringUtil.java => StringUtils.java} (62%) delete mode 100644 swing/src/net/sf/openrocket/utils/StringUtils.java diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/SingleSimulationHandler.java b/core/src/net/sf/openrocket/file/openrocket/importt/SingleSimulationHandler.java index 629d3be25..11f4af969 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/SingleSimulationHandler.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/SingleSimulationHandler.java @@ -20,7 +20,7 @@ import net.sf.openrocket.simulation.extension.SimulationExtension; import net.sf.openrocket.simulation.extension.SimulationExtensionProvider; import net.sf.openrocket.simulation.extension.impl.JavaCode; import net.sf.openrocket.startup.Application; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; import com.google.inject.Key; @@ -85,7 +85,7 @@ class SingleSimulationHandler extends AbstractElementHandler { } } else if (element.equals("listener") && content.trim().length() > 0) { extensions.add(compatibilityExtension(content.trim())); - } else if (element.equals("extension") && !StringUtil.isEmpty(attributes.get("extensionid"))) { + } else if (element.equals("extension") && !StringUtils.isEmpty(attributes.get("extensionid"))) { String id = attributes.get("extensionid"); SimulationExtension extension = null; Set extensionProviders = Application.getInjector().getInstance(new Key>() { diff --git a/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java b/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java index 00a0f4d61..1ffd75ea4 100644 --- a/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java +++ b/core/src/net/sf/openrocket/preset/loader/DoubleUnitColumnParser.java @@ -4,7 +4,7 @@ import net.sf.openrocket.preset.TypedKey; import net.sf.openrocket.preset.TypedPropertyMap; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; public class DoubleUnitColumnParser extends BaseUnitColumnParser { @@ -19,7 +19,7 @@ public class DoubleUnitColumnParser extends BaseUnitColumnParser { @Override protected void doParse(String columnData, String[] data, TypedPropertyMap props) { try { - if (StringUtil.isEmpty(columnData)) { + if (StringUtils.isEmpty(columnData)) { return; } double value = Double.valueOf(columnData); diff --git a/core/src/net/sf/openrocket/preset/loader/LineMaterialColumnParser.java b/core/src/net/sf/openrocket/preset/loader/LineMaterialColumnParser.java index 9ba4ecb86..af29dcace 100644 --- a/core/src/net/sf/openrocket/preset/loader/LineMaterialColumnParser.java +++ b/core/src/net/sf/openrocket/preset/loader/LineMaterialColumnParser.java @@ -4,7 +4,7 @@ import net.sf.openrocket.database.Databases; import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.TypedKey; import net.sf.openrocket.preset.TypedPropertyMap; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; public class LineMaterialColumnParser extends BaseColumnParser { @@ -22,7 +22,7 @@ public class LineMaterialColumnParser extends BaseColumnParser { @Override protected void doParse(String columnData, String[] data, TypedPropertyMap props) { - if (StringUtil.isEmpty(columnData)) { + if (StringUtils.isEmpty(columnData)) { return; } diff --git a/core/src/net/sf/openrocket/preset/loader/MassColumnParser.java b/core/src/net/sf/openrocket/preset/loader/MassColumnParser.java index ba624758c..e2f06cca7 100644 --- a/core/src/net/sf/openrocket/preset/loader/MassColumnParser.java +++ b/core/src/net/sf/openrocket/preset/loader/MassColumnParser.java @@ -2,7 +2,7 @@ package net.sf.openrocket.preset.loader; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.TypedPropertyMap; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; /** * Special DoubleUnitColumnParser for Mass column. Here we assume that if a mass of 0 is @@ -18,7 +18,7 @@ public class MassColumnParser extends DoubleUnitColumnParser { @Override protected void doParse(String columnData, String[] data, TypedPropertyMap props) { - if ( StringUtil.isEmpty(columnData) || "?".equals(columnData.trim())) { + if ( StringUtils.isEmpty(columnData) || "?".equals(columnData.trim())) { return; } double d = Double.valueOf(columnData); diff --git a/core/src/net/sf/openrocket/preset/loader/MaterialColumnParser.java b/core/src/net/sf/openrocket/preset/loader/MaterialColumnParser.java index f8e274d2e..6633ccf44 100644 --- a/core/src/net/sf/openrocket/preset/loader/MaterialColumnParser.java +++ b/core/src/net/sf/openrocket/preset/loader/MaterialColumnParser.java @@ -5,7 +5,7 @@ import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.TypedKey; import net.sf.openrocket.preset.TypedPropertyMap; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; public class MaterialColumnParser extends BaseColumnParser { @@ -27,7 +27,7 @@ public class MaterialColumnParser extends BaseColumnParser { @Override protected void doParse(String columnData, String[] data, TypedPropertyMap props) { - if (StringUtil.isEmpty(columnData)) { + if (StringUtils.isEmpty(columnData)) { return; } diff --git a/core/src/net/sf/openrocket/preset/loader/RockSimComponentFileLoader.java b/core/src/net/sf/openrocket/preset/loader/RockSimComponentFileLoader.java index 4aac519f1..a2854f31c 100644 --- a/core/src/net/sf/openrocket/preset/loader/RockSimComponentFileLoader.java +++ b/core/src/net/sf/openrocket/preset/loader/RockSimComponentFileLoader.java @@ -18,7 +18,7 @@ import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.ArrayList; import net.sf.openrocket.util.BugException; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; import com.opencsv.CSVReader; /** @@ -138,7 +138,7 @@ public abstract class RockSimComponentFileLoader { if (data.length == 0) { continue; } - if (data.length == 1 && StringUtil.isEmpty(data[0])) { + if (data.length == 1 && StringUtils.isEmpty(data[0])) { continue; } parseData(data); diff --git a/core/src/net/sf/openrocket/preset/loader/SurfaceMaterialColumnParser.java b/core/src/net/sf/openrocket/preset/loader/SurfaceMaterialColumnParser.java index 690d6f455..6391ad87a 100644 --- a/core/src/net/sf/openrocket/preset/loader/SurfaceMaterialColumnParser.java +++ b/core/src/net/sf/openrocket/preset/loader/SurfaceMaterialColumnParser.java @@ -4,7 +4,7 @@ import net.sf.openrocket.database.Databases; import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.TypedKey; import net.sf.openrocket.preset.TypedPropertyMap; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; public class SurfaceMaterialColumnParser extends BaseColumnParser { @@ -22,7 +22,7 @@ public class SurfaceMaterialColumnParser extends BaseColumnParser { @Override protected void doParse(String columnData, String[] data, TypedPropertyMap props) { - if (StringUtil.isEmpty(columnData)) { + if (StringUtils.isEmpty(columnData)) { return; } diff --git a/core/src/net/sf/openrocket/simulation/FlightDataType.java b/core/src/net/sf/openrocket/simulation/FlightDataType.java index bea253490..950b0c728 100644 --- a/core/src/net/sf/openrocket/simulation/FlightDataType.java +++ b/core/src/net/sf/openrocket/simulation/FlightDataType.java @@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; /** * A class defining a storable simulation variable type. This class defined numerous ready @@ -272,7 +272,7 @@ public class FlightDataType implements Comparable { // found it from symbol // if name was not given (empty string), can use the one we found - if ( s == null || StringUtil.isEmpty(s)){ + if ( s == null || StringUtils.isEmpty(s)){ s = type.getName(); } if ( u == null ){ diff --git a/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java b/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java index 0a1e4bd14..95bbf6726 100644 --- a/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java +++ b/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java @@ -11,7 +11,7 @@ import net.sf.openrocket.simulation.SimulationStatus; import net.sf.openrocket.unit.FixedUnitGroup; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.ArrayList; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -227,7 +227,7 @@ public class CustomExpression implements Cloneable { } public boolean checkSymbol() { - if (StringUtil.isEmpty(symbol)) { + if (StringUtils.isEmpty(symbol)) { return false; } @@ -254,7 +254,7 @@ public class CustomExpression implements Cloneable { } public boolean checkName() { - if (StringUtil.isEmpty(name)) { + if (StringUtils.isEmpty(name)) { return false; } @@ -304,7 +304,7 @@ public class CustomExpression implements Cloneable { * building the expression. */ public boolean checkExpression() { - if (StringUtil.isEmpty(expression)) { + if (StringUtils.isEmpty(expression)) { return false; } diff --git a/core/src/net/sf/openrocket/simulation/customexpression/RangeExpression.java b/core/src/net/sf/openrocket/simulation/customexpression/RangeExpression.java index c2bfa66f6..e01dbfef7 100644 --- a/core/src/net/sf/openrocket/simulation/customexpression/RangeExpression.java +++ b/core/src/net/sf/openrocket/simulation/customexpression/RangeExpression.java @@ -14,13 +14,12 @@ import de.congrace.exp4j.ExpressionBuilder; import de.congrace.exp4j.Variable; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.logging.Markers; -import net.sf.openrocket.simulation.customexpression.CustomExpression; import net.sf.openrocket.simulation.FlightDataType; import net.sf.openrocket.simulation.SimulationStatus; import net.sf.openrocket.util.ArrayUtils; import net.sf.openrocket.util.LinearInterpolator; import net.sf.openrocket.util.MathUtil; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; public class RangeExpression extends CustomExpression { private static final Logger log = LoggerFactory.getLogger(RangeExpression.class); @@ -30,10 +29,10 @@ public class RangeExpression extends CustomExpression { public RangeExpression(OpenRocketDocument doc, String startTime, String endTime, String variableType) { super(doc); - if (StringUtil.isEmpty(startTime)){ + if (StringUtils.isEmpty(startTime)){ startTime = "0"; } - if (StringUtil.isEmpty(endTime)){ + if (StringUtils.isEmpty(endTime)){ endTime = "t"; } diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/JavaCode.java b/core/src/net/sf/openrocket/simulation/extension/impl/JavaCode.java index 8a1acfbfa..20796dc8d 100644 --- a/core/src/net/sf/openrocket/simulation/extension/impl/JavaCode.java +++ b/core/src/net/sf/openrocket/simulation/extension/impl/JavaCode.java @@ -5,7 +5,7 @@ import net.sf.openrocket.simulation.SimulationConditions; import net.sf.openrocket.simulation.exception.SimulationException; import net.sf.openrocket.simulation.extension.AbstractSimulationExtension; import net.sf.openrocket.simulation.listeners.SimulationListener; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; import com.google.inject.Inject; import com.google.inject.Injector; @@ -19,7 +19,7 @@ public class JavaCode extends AbstractSimulationExtension { public void initialize(SimulationConditions conditions) throws SimulationException { String className = getClassName(); try { - if (!StringUtil.isEmpty(className)) { + if (!StringUtils.isEmpty(className)) { Class clazz = Class.forName(className); if (!SimulationListener.class.isAssignableFrom(clazz)) { throw new SimulationException("Class " + className + " does not implement SimulationListener"); @@ -40,7 +40,7 @@ public class JavaCode extends AbstractSimulationExtension { public String getName() { String name = trans.get("SimulationExtension.javacode.name") + ": "; String className = getClassName(); - if (!StringUtil.isEmpty(className)) { + if (!StringUtils.isEmpty(className)) { name = name + className; } else { name = name + trans.get("SimulationExtension.javacode.name.none"); diff --git a/core/src/net/sf/openrocket/unit/UnitGroup.java b/core/src/net/sf/openrocket/unit/UnitGroup.java index 74e6126bf..b4741790e 100644 --- a/core/src/net/sf/openrocket/unit/UnitGroup.java +++ b/core/src/net/sf/openrocket/unit/UnitGroup.java @@ -18,7 +18,7 @@ import java.util.regex.Pattern; import net.sf.openrocket.rocketcomponent.FlightConfiguration; import net.sf.openrocket.rocketcomponent.Rocket; -import net.sf.openrocket.util.StringUtil; +import net.sf.openrocket.util.StringUtils; /** @@ -672,7 +672,7 @@ public class UnitGroup { throw new NumberFormatException("string did not match required pattern"); } - double value = StringUtil.convertToDouble(matcher.group(1)); + double value = StringUtils.convertToDouble(matcher.group(1)); String unit = matcher.group(2).trim(); if (unit.equals("")) { diff --git a/core/src/net/sf/openrocket/util/StringUtil.java b/core/src/net/sf/openrocket/util/StringUtils.java similarity index 62% rename from core/src/net/sf/openrocket/util/StringUtil.java rename to core/src/net/sf/openrocket/util/StringUtils.java index 27be8ac44..cf94b1a2c 100644 --- a/core/src/net/sf/openrocket/util/StringUtil.java +++ b/core/src/net/sf/openrocket/util/StringUtils.java @@ -1,6 +1,33 @@ package net.sf.openrocket.util; -public class StringUtil { +import java.util.List; + +public class StringUtils { + + public static String join(String sep, Object[] values) { + if ( values == null || values.length == 0 ) { + return ""; + } + StringBuilder value = new StringBuilder(); + for( Object v : values ) { + if( value.length() > 0 ) { + value.append(sep); + } + value.append(String.valueOf(v)); + } + return value.toString(); + } + + /** + * Join starting with a list of strings rather than an array + * @param sep separator + * @param listValues list of values + * @return joined string + */ + public static String join(String sep, List listValues) { + String[] values = listValues.toArray(new String[0]); + return join(sep, values); + } /** * Returns true if the argument is null or empty. diff --git a/core/test/net/sf/openrocket/util/StringUtilTest.java b/core/test/net/sf/openrocket/util/StringUtilTest.java index 7b1543d4c..0147921aa 100644 --- a/core/test/net/sf/openrocket/util/StringUtilTest.java +++ b/core/test/net/sf/openrocket/util/StringUtilTest.java @@ -8,40 +8,40 @@ import static org.junit.Assert.assertEquals; /** * A class that tests - * {@link net.sf.openrocket.util.StringUtil}. + * {@link StringUtils}. */ public class StringUtilTest { @Test public void testStrings() { - assertTrue(StringUtil.isEmpty("")); - assertTrue(StringUtil.isEmpty(new StringBuilder().toString())); // "" - assertTrue(StringUtil.isEmpty(" ")); - assertTrue(StringUtil.isEmpty(" ")); - assertTrue(StringUtil.isEmpty(" ")); - assertTrue(StringUtil.isEmpty(null)); + assertTrue(StringUtils.isEmpty("")); + assertTrue(StringUtils.isEmpty(new StringBuilder().toString())); // "" + assertTrue(StringUtils.isEmpty(" ")); + assertTrue(StringUtils.isEmpty(" ")); + assertTrue(StringUtils.isEmpty(" ")); + assertTrue(StringUtils.isEmpty(null)); - assertFalse(StringUtil.isEmpty("A")); - assertFalse(StringUtil.isEmpty(" . ")); + assertFalse(StringUtils.isEmpty("A")); + assertFalse(StringUtils.isEmpty(" . ")); } @Test public void testConvertToDouble() { - assertEquals(0.2, StringUtil.convertToDouble(".2"), MathUtil.EPSILON); - assertEquals(0.2, StringUtil.convertToDouble(",2"), MathUtil.EPSILON); - assertEquals(1, StringUtil.convertToDouble("1,"), MathUtil.EPSILON); - assertEquals(2, StringUtil.convertToDouble("2."), MathUtil.EPSILON); - assertEquals(1, StringUtil.convertToDouble("1"), MathUtil.EPSILON); - assertEquals(1.52, StringUtil.convertToDouble("1.52"), MathUtil.EPSILON); - assertEquals(1.52, StringUtil.convertToDouble("1,52"), MathUtil.EPSILON); - assertEquals(1.5, StringUtil.convertToDouble("1.500"), MathUtil.EPSILON); - assertEquals(1.5, StringUtil.convertToDouble("1,500"), MathUtil.EPSILON); - assertEquals(1500.61, StringUtil.convertToDouble("1.500,61"), MathUtil.EPSILON); - assertEquals(1500.61, StringUtil.convertToDouble("1,500.61"), MathUtil.EPSILON); - assertEquals(1500.2, StringUtil.convertToDouble("1,500,200"), MathUtil.EPSILON); - assertEquals(1500.2, StringUtil.convertToDouble("1.500.200"), MathUtil.EPSILON); - assertEquals(1500200.23, StringUtil.convertToDouble("1500200.23"), MathUtil.EPSILON); - assertEquals(1500200.23, StringUtil.convertToDouble("1500200,23"), MathUtil.EPSILON); - assertEquals(1500200.23, StringUtil.convertToDouble("1,500,200.23"), MathUtil.EPSILON); - assertEquals(1500200.23, StringUtil.convertToDouble("1.500.200,23"), MathUtil.EPSILON); + assertEquals(0.2, StringUtils.convertToDouble(".2"), MathUtil.EPSILON); + assertEquals(0.2, StringUtils.convertToDouble(",2"), MathUtil.EPSILON); + assertEquals(1, StringUtils.convertToDouble("1,"), MathUtil.EPSILON); + assertEquals(2, StringUtils.convertToDouble("2."), MathUtil.EPSILON); + assertEquals(1, StringUtils.convertToDouble("1"), MathUtil.EPSILON); + assertEquals(1.52, StringUtils.convertToDouble("1.52"), MathUtil.EPSILON); + assertEquals(1.52, StringUtils.convertToDouble("1,52"), MathUtil.EPSILON); + assertEquals(1.5, StringUtils.convertToDouble("1.500"), MathUtil.EPSILON); + assertEquals(1.5, StringUtils.convertToDouble("1,500"), MathUtil.EPSILON); + assertEquals(1500.61, StringUtils.convertToDouble("1.500,61"), MathUtil.EPSILON); + assertEquals(1500.61, StringUtils.convertToDouble("1,500.61"), MathUtil.EPSILON); + assertEquals(1500.2, StringUtils.convertToDouble("1,500,200"), MathUtil.EPSILON); + assertEquals(1500.2, StringUtils.convertToDouble("1.500.200"), MathUtil.EPSILON); + assertEquals(1500200.23, StringUtils.convertToDouble("1500200.23"), MathUtil.EPSILON); + assertEquals(1500200.23, StringUtils.convertToDouble("1500200,23"), MathUtil.EPSILON); + assertEquals(1500200.23, StringUtils.convertToDouble("1,500,200.23"), MathUtil.EPSILON); + assertEquals(1500200.23, StringUtils.convertToDouble("1.500.200,23"), MathUtil.EPSILON); } } diff --git a/swing/src/net/sf/openrocket/file/SimulationTableCSVExport.java b/swing/src/net/sf/openrocket/file/SimulationTableCSVExport.java index 3dc4ca889..260eac1b7 100644 --- a/swing/src/net/sf/openrocket/file/SimulationTableCSVExport.java +++ b/swing/src/net/sf/openrocket/file/SimulationTableCSVExport.java @@ -10,7 +10,7 @@ import java.util.HashMap; import javax.swing.JOptionPane; import javax.swing.JTable; -import net.sf.openrocket.utils.StringUtils; +import net.sf.openrocket.util.StringUtils; import org.apache.commons.text.StringEscapeUtils; import net.sf.openrocket.aerodynamics.Warning; diff --git a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java index be698ae6e..dcbf04aa0 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/motor/thrustcurve/MotorInformationPanel.java @@ -16,6 +16,7 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; +import net.sf.openrocket.util.StringUtils; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; @@ -33,7 +34,6 @@ import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.motor.ThrustCurveMotor; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; -import net.sf.openrocket.utils.StringUtils; @SuppressWarnings("serial") class MotorInformationPanel extends JPanel { diff --git a/swing/src/net/sf/openrocket/utils/StringUtils.java b/swing/src/net/sf/openrocket/utils/StringUtils.java deleted file mode 100644 index bba5c0789..000000000 --- a/swing/src/net/sf/openrocket/utils/StringUtils.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.sf.openrocket.utils; - -import java.util.List; - -public class StringUtils { - - public static String join(String sep, Object[] values) { - if ( values == null || values.length == 0 ) { - return ""; - } - StringBuilder value = new StringBuilder(); - for( Object v : values ) { - if( value.length() > 0 ) { - value.append(sep); - } - value.append(String.valueOf(v)); - } - return value.toString(); - } - - /** - * Join starting with a list of strings rather than an array - * @param sep - * @param listValues - * @return - */ - public static String join(String sep, List listValues) { - String[] values = listValues.toArray(new String[listValues.size()]); - return join(sep, values); - } - - -}