1+ package com .annimon .ownlang .lib .modules .functions ;
2+
3+ import com .annimon .ownlang .exceptions .ArgumentsMismatchException ;
4+ import com .annimon .ownlang .exceptions .TypeException ;
5+ import com .annimon .ownlang .lib .*;
6+
7+ public final class std_join implements Function {
8+
9+ @ Override
10+ public Value execute (Value ... args ) {
11+ if (args .length < 1 ) throw new ArgumentsMismatchException ("At least one argument expected" );
12+ if (args [0 ].type () != Types .ARRAY ) {
13+ throw new TypeException ("Array expected in first argument" );
14+ }
15+
16+ final ArrayValue array = (ArrayValue ) args [0 ];
17+ switch (args .length ) {
18+ case 1 :
19+ return join (array , "" , "" , "" );
20+ case 2 :
21+ return join (array , args [1 ].asString (), "" , "" );
22+ case 3 :
23+ return join (array , args [1 ].asString (), args [2 ].asString (), args [2 ].asString ());
24+ case 4 :
25+ return join (array , args [1 ].asString (), args [2 ].asString (), args [3 ].asString ());
26+ default :
27+ throw new ArgumentsMismatchException ("Wrong number of arguments" );
28+ }
29+ }
30+
31+ private static StringValue join (ArrayValue array , String delimiter , String prefix , String suffix ) {
32+ final StringBuilder sb = new StringBuilder ();
33+ for (Value value : array ) {
34+ if (sb .length () > 0 ) sb .append (delimiter );
35+ else sb .append (prefix );
36+ sb .append (value .asString ());
37+ }
38+ sb .append (suffix );
39+ return new StringValue (sb .toString ());
40+ }
41+ }
0 commit comments