Entity: StringLib 453 154 null * Operation: before StringLib String str String delim String query static true i = str->indexOf(delim) & ( ( i > 0 => result = str.subrange(1,i - 1) ) & ( i <= 0 => result = str ) ) Operation: after StringLib String str String delim String query static true i = str->indexOf(delim) & ( ( i > 0 => result = str.subrange(i + delim.size,str.size) ) & ( i <= 0 => result = str ) ) Operation: equalsIgnoreCase StringLib boolean s1 String s2 String query static true str1 = s1.toLowerCase & str2 = s2.toLowerCase & ( ( str1 = str2 => result = true ) & ( str1 /= str2 => result = false ) ) Operation: lastIndexOf StringLib int s String d String query static true r = s.reverse & i = r->indexOf(d) & result = s.size - i + 1 Operation: split StringLib Sequence(String) str String delim String query static true result = str Operation: replace StringLib String str String delim String s2 String query static delim.size > 0 result = str Operation: trim StringLib String str String query static true result = str Operation: editDistance StringLib int s String t String static true result = 0 Activity: StringLib split res : Sequence := Sequence{} ; i : int ; i := str->indexOf(delim) ; while i > 0 do ( res := res->append(str.subrange(1,i - 1)) ; str := str.subrange(i + delim.size,str.size) ; i := str->indexOf(delim) ) ; res := res->append(str) ; return res Activity: StringLib replace res : String ; res := "" ; i : int ; i := str->indexOf(delim) ; while i > 0 do ( res := res + str.subrange(1,i - 1) + s2 ; str := str.subrange(i + delim.size,str.size) ; i := str->indexOf(delim) ) ; res := res + str ; return res Activity: StringLib trim res : String ; res := "" ; i : int ; i := 1 ; while ( i < str.size & str[i] = " " ) do i := i + 1 ; j : int ; j := str.size ; while j >= 1 & str[j] = " " do j := j - 1 ; if j < i then res := "" else res := str.subrange(i,j) ; return res Activity: StringLib editDistance m : int ; n : int ; m := s.size ; n := t.size ; var d : Sequence(Sequence(int)) ; d := Integer.subrange(1,m+1)->collect( i | Integer.subrange(1,n+1)->collect( j | 0 ) ) ; for i : Integer.subrange(1,m+1) do ( var sq : Sequence(int) ; sq := d->at(i) ; sq[1] := i-1 ) ; var sq1 : Sequence(int) ; sq1 := d->at(1) ; for j : Integer.subrange(1,n+1) do sq1[j] := j-1 ; for j : Integer.subrange(1,n) do for i : Integer.subrange(1,m) do (var sqi : Sequence(int) ; sqi := d->at(i+1) ; if s[i] = t[i] then sqi[j+1] := (d->at(i))->at(j) else sqi[j+1] := Set{ ((d->at(i))->at(j+1)+1), ((d->at(i+1))->at(j)+1), ((d->at(i))->at(j)+1) }->min() ) ; return (d->at(m+1))->at(n+1)