diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigImplUtil.java b/config/src/main/java/com/typesafe/config/impl/ConfigImplUtil.java index 5ea65537..fde0341d 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigImplUtil.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigImplUtil.java @@ -78,8 +78,10 @@ final public class ConfigImplUtil { if (s.length() == 0) return renderJsonString(s); + // if it starts with a hyphen or number, we have to quote + // to ensure we end up with a string and not a number int first = s.codePointAt(0); - if (Character.isDigit(first)) + if (Character.isDigit(first) || first == '-') return renderJsonString(s); if (s.startsWith("include") || s.startsWith("true") || s.startsWith("false") @@ -89,7 +91,7 @@ final public class ConfigImplUtil { // only unquote if it's pure alphanumeric for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i); - if (!(Character.isLetter(c) || Character.isDigit(c))) + if (!(Character.isLetter(c) || Character.isDigit(c) || c == '-')) return renderJsonString(s); } diff --git a/config/src/test/resources/test11.conf b/config/src/test/resources/test11.conf new file mode 100644 index 00000000..d876dfc6 --- /dev/null +++ b/config/src/test/resources/test11.conf @@ -0,0 +1,7 @@ +// this checks quoting of strings that could be numbers, when we render + +"10" = "42" +"-10" = "-42" +foo-bar = bar-baz +"---" = "------" +a- = b-