@@ -23,10 +23,38 @@ public Value access(Value propertyValue) {
2323 // Properties
2424 case "length" :
2525 return NumberValue .of (length ());
26+ case "lower" :
27+ return new StringValue (value .toLowerCase ());
28+ case "upper" :
29+ return new StringValue (value .toUpperCase ());
30+ case "chars" : {
31+ final Value [] chars = new Value [length ()];
32+ int i = 0 ;
33+ for (char ch : value .toCharArray ()) {
34+ chars [i ++] = NumberValue .of ((int ) ch );
35+ }
36+ return new ArrayValue (chars );
37+ }
2638
2739 // Functions
2840 case "trim" :
29- return new FunctionValue (args -> new StringValue (value .trim ()));
41+ return Converters .voidToString (value ::trim );
42+ case "startsWith" :
43+ return new FunctionValue (args -> {
44+ Arguments .checkOrOr (1 , 2 , args .length );
45+ int offset = (args .length == 2 ) ? args [1 ].asInt () : 0 ;
46+ return NumberValue .fromBoolean (value .startsWith (args [0 ].asString (), offset ));
47+ });
48+ case "endsWith" :
49+ return Converters .stringToBoolean (value ::endsWith );
50+ case "matches" :
51+ return Converters .stringToBoolean (value ::matches );
52+ case "contains" :
53+ return Converters .stringToBoolean (value ::contains );
54+ case "equalsIgnoreCase" :
55+ return Converters .stringToBoolean (value ::equalsIgnoreCase );
56+ case "isEmpty" :
57+ return Converters .voidToBoolean (value ::isEmpty );
3058
3159 default :
3260 if (Functions .isExists (prop )) {
@@ -42,7 +70,7 @@ public Value access(Value propertyValue) {
4270 }
4371 throw new UnknownPropertyException (prop );
4472 }
45-
73+
4674 public int length () {
4775 return value .length ();
4876 }
0 commit comments