7.2 Strings and String Operations

Key Takeaways

  • In ETS pseudocode, strings are concatenated with + and characters are usually numbered from position 0.
  • When a method table says substring ( begin, end ) returns positions begin through end − 1, "computer".substring ( 3, 6 ) is "put".
  • String methods such as toUpperCase ( ) return a new string; unless the result is assigned or printed, the original value is unchanged.
  • Comparisons of strings use character codes, so uppercase letters (65–90 in ASCII) sort before lowercase letters (97–122).
  • In Java, compare string contents with equals, not ==, which compares object references.
Last updated: September 2026

What this competency asks

Within data types, ETS lists: identify the correct sequence of string operations to produce a given output. The discussion questions add: evaluate an expression that uses string operations. ETS's sample question on strings provides a table of methods (toLowerCase, toUpperCase, substring, and length) and asks which code segment turns "Applesauce" into "aPPLESAUCE". The skill is reading a method specification precisely and composing calls in the right order.

String basics

A string is a sequence of characters. Assume the positions are numbered starting at 0, as ETS's sample table states:

Position01234567
"computer"computer
  • Length: 8. The last position is length − 1 = 7.
  • Concatenation: "com" + "puter" is "computer". "Score: " + 95 is "Score: 95".
  • Empty string: "" has length 0.

A typical method table

Questions define the methods they use. A representative table looks like this:

MethodBehavior
int length ( )Returns the number of characters
String substring ( int begin, int end )Returns the characters from position begin through end − 1. ETS's sample table also returns "" for invalid positions
String toUpperCase ( )Returns the string with letters converted to uppercase
String toLowerCase ( )Returns the string with letters converted to lowercase
int indexOf ( String s )Returns the position of the first occurrence of s, or −1 if it does not occur

Always use the table given in the question. Some languages define substring as (start, length) instead of (start, end). On the test, the stem's definition wins.

Reading substring correctly

With an exclusive end position:

Call on "computer"ResultWhy
substring ( 0, 1 )"c"Position 0 only
substring ( 3, 6 )"put"Positions 3, 4, 5
substring ( 1, length ( ) )"omputer"Position 1 to the end
substring ( 4, 4 )""begin = end gives no characters

A useful identity: substring ( a, b ) has length b − a.

Composing operations to produce an output

Goal: turn "hELLO" into "Hello".

  1. The first character must become uppercase: value.substring ( 0, 1 ).toUpperCase ( ) gives "H".
  2. The rest must become lowercase: value.substring ( 1, value.length ( ) ).toLowerCase ( ) gives "ello".
  3. Concatenate: "H" + "ello" gives "Hello".
String value ← "hELLO"
value ← value.substring ( 0, 1 ).toUpperCase ( ) + value.substring ( 1, value.length ( ) ).toLowerCase ( )
print value

Traps in the answer choices usually include:

  • Converting the whole string in two steps, such as toUpperCase followed by toLowerCase. The second call undoes the first.
  • A substring that overlaps or skips a character, such as substring ( 0, 2 ) followed by substring ( 1, … ), which repeats position 1.
  • Calling a method without assigning or using the result. Methods like toUpperCase ( ) return a new string; in most languages strings are immutable, so the original is unchanged.

Building and processing strings with loops

Reversing a string

String word ← "code"
String result ← ""
for ( int i ← word.length ( ) - 1; i ≥ 0; i ← i - 1 )
    result ← result + word.substring ( i, i + 1 )
end for
print result
iCharacter addedresult
3e"e"
2d"ed"
1o"edo"
0c"edoc"

Output: edoc. The loop starts at length ( ) - 1, not length ( ), which would be past the end.

Counting a character

int count ← 0
for ( int i ← 0; i < text.length ( ); i ← i + 1 )
    if ( text.substring ( i, i + 1 ) == "a" )
        count ← count + 1
    end if
end for

Other common patterns follow the same shape: checking for a palindrome (compare position i with position length − 1 − i), removing spaces (append only non-space characters), and finding the first vowel (stop when found).

Comparing strings

  • Equality: in ETS pseudocode == compares values. In Java, == compares object references. Use a.equals ( b ) to compare contents, or a.equalsIgnoreCase ( b ) to ignore case.
  • Ordering: strings are ordered lexicographically by character codes, like dictionary order but by code value. In ASCII, 'A' is 65 and 'a' is 97, so "Zebra" comes before "apple". Digits (48–57) come before uppercase letters. Converting both strings to the same case gives a case-insensitive ordering.
  • Comparison stops at the first differing character. "cat" comes before "cattle" because it runs out of characters first.

Converting between strings and numbers

Input from a keyboard or a text file arrives as a String. "42" + 1 concatenates to "421", while converting first, as with Integer.parseInt ( "42" ) + 1 in Java, gives 43. Going the other way, concatenating a number with a string converts the number to text. Programs that ask users for numbers should validate the text before converting it (Section 11.2).

Test Your Knowledge

Using a method table in which substring ( begin, end ) returns positions begin through end − 1 and the first character is at position 0, which code segment prints "Maple" when value is "mAPLE"?

A
B
C
D
Test Your Knowledge

With positions numbered from 0 and substring ( begin, end ) returning positions begin through end − 1, what does "computer".substring ( 3, 6 ) return?

A
B
C
D
Test Your Knowledge

What is printed?

String word ← "loop"
String result ← ""
for ( int i ← word.length ( ) - 1; i ≥ 0; i ← i - 1 )
    result ← result + word.substring ( i, i + 1 )
end for
print result

A
B
C
D