Smart Contract
StringUtils
A.1e4aa0b87d10b141.StringUtils
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}