Compose-3000: Working with Strings in OML

This tutorial explains how to:
  • Create and assign a string.
  • String concatenation.
  • Replace a string.
  • Split a string.
  • Compare a string.

Creating and Assigning a String

Strings are any object enclosed by single quotes. For example:

'Hello World'

To assign this string to a variable we simply write:

a= 'Hello World'

Note that a double quote is not a valid string delimiter in this release of OML, and it will return an error:

Below are valid string literals:

Manipulating Strings with Concatenation

  1. If you assign the string 'The quick brown fox jumps over the lazy dog' to a and a new string b as 'Hello World' you can’t add the two together. Doing so will result in an error:

    Intuitively the expression 'a + b' should concatenate 'b' onto the end of 'a'. This, however, is not the case. In OML, strings are stored as vectors of ASCII characters (equivalent integers). As such, vectors with different length cannot be added.

  2. If you want to concatenate 'b' with 'a', use strcat(a,b) as follows:
  3. You can also use a pair of brackets to do the concatenation.

    [a,' ',b] is a joined string a and b, with a white space in the middle, as shown below:

Replace a String

There are several ways to replace a substring with another:

  1. You can use the built-in function strrep directly:
    string = 'there are ten boys and ten girls.'
    strRep = strrep(string,'ten','five')
  2. strrep replaces all substrings. If you only want to replace the first ‘ten'in the previous example, you could use strfind to find the index of the first ‘ten’, then do the concatenation. See the example below:
    strIn = 'there are ten boys and ten girls.'
    % find string first
    index = strfind(strIn,'ten');
    index1 = index(1);
    index2 = index1 + length('ten');
    strOut = strcat(strIn(1:index1-1),' five',strIn(index2:end))
  3. You can also use the regexp function to find the first and last index of the substring 'ten', then do the concatenation. See this example:
    strIn = 'there are ten boys and ten girls.'
    % using regexp
    index1 = regexp(strIn,'ten','start');
    index2 = regexp(strIn,'ten','end');
    strOut = strcat(strIn(1:index1(1)-1),'five',strIn(index2(1)+1:length(strIn)))

    This returns the same result as the previous example:

Split a String

  1. To split the string into each word, use the built-in function strsplit. You need to specify the separator for the strings; the default separator is a blank space.
    a = 'The quick brown fox jumps over the lazy dog'
    % split a string, default separator is blank space
    b = strsplit(a)

    This results in a cell of strings with each word delineated by the white space between them.

  2. Sometimes, separators in a string may not always be consistent. You can specify all separators in a cell in this case, as shown in this example:
    time = '2016/2/23,2016-2-24'
    % specify separators in a cell
    strOut = strsplit(time,{'/','-',','})

Compare Strings

  1. To compare a string, use the strcmp function. It returns 1 (true) if the two strings compared are identical, otherwise it returns 0 (false). See the example below:
    str1 = 'this is str1';
    str2 = 'this is str2';
    out1 = strcmp(str1,str2)

    This returns false since str1 and str2 are not identical:

  2. If you want to compare the first n elements of two strings, use strncmp. In the previous example, the first 11 elements are identical, so it returns true:
    str1 = 'this is str1';
    str2 = 'this is str2';
    out1 = strncmp(str1,str2,11)

    Result:

  3. If the differences in letter case aren’t a concern, you can use strcmpi:
    str3 = 'Abc';
    str4 = 'ABC';
    out3 = strcmp(str3,str4)
    % case insensitive
    out4 = strcmpi(str3,str4)

    Result: