diff --git a/src/main/scala/com/datasonnet/DS.scala b/src/main/scala/com/datasonnet/DS.scala index bd488e93..cefe7743 100644 --- a/src/main/scala/com/datasonnet/DS.scala +++ b/src/main/scala/com/datasonnet/DS.scala @@ -2353,10 +2353,11 @@ object DSLowercase extends Library { (_, _, value: Val, sep: String) => value match { case Val.Str(s) => + val sepLength = sep.length Val.Lazy(Val.Str(s.substring( s.indexOf(sep) match { case -1 => s.length - case i => if (sep.equals("")) i else i + 1 + case i => if (sep.equals("")) i else i + sepLength } ))).force case Val.Null => Val.Lazy(Val.Null).force diff --git a/src/test/java/com/datasonnet/StringsTest.java b/src/test/java/com/datasonnet/StringsTest.java index 2658439c..a47904f8 100644 --- a/src/test/java/com/datasonnet/StringsTest.java +++ b/src/test/java/com/datasonnet/StringsTest.java @@ -485,6 +485,14 @@ void testStrings_substringAfter() { value = mapper.transform("{}").replaceAll("\"", ""); assertEquals("abc", value); + mapper = new Mapper(lib + pack + ".substringAfter(\"abcba\", \"ab\")", new ArrayList<>(), new HashMap<>(), true); + value = mapper.transform("{}").replaceAll("\"", ""); + assertEquals("cba", value); + + mapper = new Mapper(lib + pack + ".substringAfter(\"abcXXXba\", \"XXX\")", new ArrayList<>(), new HashMap<>(), true); + value = mapper.transform("{}").replaceAll("\"", ""); + assertEquals("ba", value); + } @Test