diff --git a/docs/scarpet/Full.md b/docs/scarpet/Full.md index 87375758..1fbefde5 100644 --- a/docs/scarpet/Full.md +++ b/docs/scarpet/Full.md @@ -1579,12 +1579,14 @@ join('-','foo') => foo join('-', 'foo', 'bar') => foo-bar -### `split(delim, expr)` +### `split(delim?, expr)` -Splits a string undr `expr` by `delim` which can be a regular expression +Splits a string under `expr` by `delim` which can be a regular expression. If no delimiter is specified, it splits +by characters.
-split('',foo) => [f, o, o]
+split('foo') => [f, o, o]
+split('','foo') => [f, o, o]
split('.','foo.bar') => []
split('\\.','foo.bar') => [foo, bar]
diff --git a/docs/scarpet/language/Containers.md b/docs/scarpet/language/Containers.md
index 1dcd4fb1..1f4759d9 100644
--- a/docs/scarpet/language/Containers.md
+++ b/docs/scarpet/language/Containers.md
@@ -155,12 +155,14 @@ join('-','foo') => foo
join('-', 'foo', 'bar') => foo-bar
-### `split(delim, expr)`
+### `split(delim?, expr)`
-Splits a string undr `expr` by `delim` which can be a regular expression
+Splits a string under `expr` by `delim` which can be a regular expression. If no delimiter is specified, it splits
+by characters.
-split('',foo) => [f, o, o]
+split('foo') => [f, o, o]
+split('','foo') => [f, o, o]
split('.','foo.bar') => []
split('\\.','foo.bar') => [foo, bar]
diff --git a/src/main/java/carpet/script/language/DataStructures.java b/src/main/java/carpet/script/language/DataStructures.java
index 42bdfdfa..c61f5d42 100644
--- a/src/main/java/carpet/script/language/DataStructures.java
+++ b/src/main/java/carpet/script/language/DataStructures.java
@@ -52,10 +52,24 @@ public class DataStructures {
return new StringValue(toJoin.stream().map(Value::getString).collect(Collectors.joining(delimiter)));
});
- expression.addBinaryFunction("split", (d, v) ->
+ expression.addFunction("split", (lv) ->
{
- String delimiter = d.getString();
- String hwat = v.getString();
+ String delimiter;
+ String hwat;
+ if (lv.size() == 1)
+ {
+ hwat = lv.get(0).getString();
+ delimiter = "";
+ }
+ else if (lv.size() == 2)
+ {
+ delimiter = lv.get(0).getString();
+ hwat = lv.get(1).getString();
+ }
+ else
+ {
+ throw new InternalExpressionException("'split' takes 1 or 2 arguments");
+ }
try
{
return ListValue.wrap(Arrays.stream(hwat.split(delimiter)).map(StringValue::new).collect(Collectors.toList()));