Smart Contract

StringUtils

A.1e4aa0b87d10b141.StringUtils

Valid From

85,981,970

Deployed

1w ago
Feb 16, 2026, 08:14:21 PM UTC

Dependents

0 imports
1import ArrayUtils from 0x1e4aa0b87d10b141
2
3// Copied from https://github.com/green-goo-dao/flow-utils/blob/crescendo/contracts/StringUtils.cdc
4// Special thanks to the Green Goo Dao contributors for creating this contract
5access(all) contract StringUtils {
6
7    access(all) fun format(_ s: String, _ args: {String:String}): String{
8        var formatted = s
9        for key in args.keys{
10            formatted = StringUtils.replaceAll(formatted, "{".concat(key).concat("}"), args[key]!)
11        }
12        return formatted
13    }
14
15    access(all) fun explode(_ s: String): [String]{
16        var chars : [String] =  []
17        for i in ArrayUtils.range(0, s.length){
18            chars.append(s[i].toString())
19        }  
20        return chars
21    }
22
23    access(all) fun trimLeft(_ s: String): String{
24        for i in ArrayUtils.range(0, s.length){
25            if s[i] != " "{
26                return s.slice(from: i, upTo: s.length)
27            }
28        }
29        return ""
30    }
31
32    access(all) fun trim(_ s: String): String{
33        return self.trimLeft(s)
34    }
35
36    access(all) fun replaceAll(_ s: String, _ search: String, _ replace: String): String{
37        return s.replaceAll(of: search, with: replace)
38    }
39
40    access(all) fun hasPrefix(_ s: String, _ prefix: String) : Bool{
41        return s.length >= prefix.length && s.slice(from:0, upTo: prefix.length)==prefix
42    }
43
44    access(all) fun hasSuffix(_ s: String, _ suffix: String) : Bool{
45        return s.length >= suffix.length && s.slice(from:s.length-suffix.length, upTo: s.length)==suffix
46    }
47
48    access(all) fun index(_ s : String, _ substr : String, _ startIndex: Int): Int?{
49        for i in ArrayUtils.range(startIndex,s.length-substr.length+1){
50            if s[i]==substr[0] && s.slice(from:i, upTo:i+substr.length) == substr{
51                return i
52            }
53        }
54        return nil
55    }
56
57    access(all) fun count(_ s: String, _ substr: String): Int{
58        var pos = [self.index(s, substr, 0)]
59        while pos[0]!=nil {
60            pos.insert(at:0, self.index(s, substr, pos[0]!+pos.length*substr.length+1))
61        }
62        return pos.length-1
63    }
64
65    access(all) fun contains(_ s: String, _ substr: String): Bool {
66        if let index =  self.index(s, substr, 0) {
67            return true
68        }
69        return false
70    }
71
72    access(all) fun substringUntil(_ s: String, _ until: String, _ startIndex: Int): String{
73        if let index = self.index( s, until, startIndex){
74            return s.slice(from:startIndex, upTo: index)
75        }
76        return s.slice(from:startIndex, upTo:s.length)
77    }
78
79    access(all) fun split(_ s: String, _ delimiter: String): [String] {
80        return s.split(separator: delimiter)
81    }
82
83    access(all) fun join(_ strs: [String], _ separator: String): String {
84        return String.join(strs, separator: separator)
85    }
86}