Skip to content

Commit f500cff

Browse files
authored
Improve method U.removeMinusesAndConvertNumbers(map).
1 parent 2f25dbd commit f500cff

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/main/java/com/github/underscore/lodash/U.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ public class U<T> extends com.github.underscore.U<T> {
5252
private static String lower = "[a-z\\xdf-\\xf6\\xf8-\\xff]+";
5353
private static java.util.regex.Pattern reWords = java.util.regex.Pattern.compile(
5454
upper + "+(?=" + upper + lower + ")|" + upper + "?" + lower + "|" + upper + "+|[0-9]+");
55-
private static final Set<Character> NUMBER_CHARS = new HashSet<Character>(
56-
Arrays.asList('.', 'e', 'E', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'));
5755

5856
static {
5957
String[] deburredLetters = new String[] {
@@ -2111,23 +2109,16 @@ private static Map<String, Object> replaceKeys(Map<String, Object> map) {
21112109
private static Object makeObject(Object value) {
21122110
final Object result;
21132111
if (value instanceof List) {
2114-
List<Map<String, Object>> values = newArrayList();
2112+
List<Object> values = newArrayList();
21152113
for (Object item : (List) value) {
2116-
values.add(replaceKeys((Map<String, Object>) item));
2114+
values.add(item instanceof Map ? replaceKeys((Map<String, Object>) item) : item);
21172115
}
21182116
result = values;
21192117
} else if (value instanceof Map) {
21202118
result = replaceKeys((Map<String, Object>) value);
21212119
} else {
21222120
String stringValue = String.valueOf(value);
2123-
boolean onlyNumbers = true;
2124-
for (char ch : stringValue.toCharArray()) {
2125-
if (!NUMBER_CHARS.contains(ch)) {
2126-
onlyNumbers = false;
2127-
break;
2128-
}
2129-
}
2130-
result = onlyNumbers ? Xml.stringToNumber(stringValue) : value;
2121+
result = stringValue.matches("^-?\\d*([.eE])?\\d+$") ? Xml.stringToNumber(stringValue) : value;
21312122
}
21322123
return result;
21332124
}
@@ -2155,7 +2146,7 @@ private static Object makeObjectSelfClose(Object value) {
21552146
if (value instanceof List) {
21562147
List<Object> values = newArrayList();
21572148
for (Object item : (List) value) {
2158-
values.add(replaceSelfCloseWithNull((Map) item));
2149+
values.add(item instanceof Map ? replaceSelfCloseWithNull((Map) item) : item);
21592150
}
21602151
result = values;
21612152
} else if (value instanceof Map) {

src/test/java/com/github/underscore/lodash/LodashTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,9 +640,14 @@ public void xmlToJson() {
640640
+ " \"#omit-xml-declaration\": \"yes\"\n"
641641
+ "}",
642642
U.xmlToJson("<a><b/><b/></a>", U.Mode.REPLACE_SELF_CLOSING_WITH_NULL));
643-
Map<String, Object> map = new HashMap<String, Object>();
643+
Map<String, Object> map = U.newLinkedHashMap();
644644
map.put("-self-closing", "false");
645645
U.replaceSelfCloseWithNull(map);
646+
Map<String, Object> map2 = U.newLinkedHashMap();
647+
List<Object> list = U.newArrayList();
648+
list.add(U.newArrayList());
649+
map2.put("list", list);
650+
U.replaceSelfCloseWithNull(map2);
646651
}
647652

648653
@Test
@@ -710,6 +715,12 @@ public void removeMinusesAndConvertNumbers() {
710715
Map<String, Object> result4 = U.removeMinusesAndConvertNumbers(
711716
(Map<String, Object>) U.fromXml("<a><b c=\"1\"/></a>"));
712717
assertEquals("{a={b={c=1}}}", result4.toString());
718+
Map<String, Object> map = U.newLinkedHashMap();
719+
List<Object> list = U.newArrayList();
720+
list.add(U.newArrayList());
721+
map.put("list", list);
722+
Map<String, Object> result5 = U.removeMinusesAndConvertNumbers(map);
723+
assertEquals("{list=[[]]}", result5.toString());
713724
}
714725

715726
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)