Strings have useful methods and properties for trimming, changing case, and checking content.

Clean and inspect text

rawName
string_operations.swift
Replay: real traced execution (multi-file project)
import Foundation

let rawName = "  ada  "
let trimmed = rawName.trimmingCharacters(in: CharacterSet.whitespaces)
let display = trimmed.uppercased()
let hasA = display.contains("A")

print("display=\(display)")
print("count=\(display.count)")
print("hasA=\(hasA)")
import Foundation

let rawName = "  grace  "
let trimmed = rawName.trimmingCharacters(in: CharacterSet.whitespaces)
let display = trimmed.uppercased()
let hasA = display.contains("A")

print("display=\(display)")
print("count=\(display.count)")
print("hasA=\(hasA)")
import Foundation

let rawName = "  linus  "
let trimmed = rawName.trimmingCharacters(in: CharacterSet.whitespaces)
let display = trimmed.uppercased()
let hasA = display.contains("A")

print("display=\(display)")
print("count=\(display.count)")
print("hasA=\(hasA)")
  1. rawName ← ada , trimmed ← ada, display ← ADA, hasA ← true

    3let rawName→   ada   = "  ada  "  //@rawName="  grace  ", "  linus  "4let trimmed→ ada = rawName  ada  .trimmingCharacters(in: CharacterSet.whitespaces)5let display→ ADA = trimmedada.uppercased()6let hasA→ true = displayADA.contains("A")78print("display=\(displayADA)")9print("count=\(display.count3)")10print("hasA=\(hasAtrue)")
    outputdisplay=ADA
    count=3
    hasA=true
  1. rawName ← grace , trimmed ← grace, display ← GRACE, hasA ← true

    3let rawName→   grace   = "  grace  "4let trimmed→ grace = rawName  grace  .trimmingCharacters(in: CharacterSet.whitespaces)5let display→ GRACE = trimmedgrace.uppercased()6let hasA→ true = displayGRACE.contains("A")78print("display=\(displayGRACE)")9print("count=\(display.count5)")10print("hasA=\(hasAtrue)")
    outputdisplay=GRACE
    count=5
    hasA=true
  1. rawName ← linus , trimmed ← linus, display ← LINUS, hasA ← false

    3let rawName→   linus   = "  linus  "4let trimmed→ linus = rawName  linus  .trimmingCharacters(in: CharacterSet.whitespaces)5let display→ LINUS = trimmedlinus.uppercased()6let hasA→ false = displayLINUS.contains("A")78print("display=\(displayLINUS)")9print("count=\(display.count5)")10print("hasA=\(hasAfalse)")
    outputdisplay=LINUS
    count=5
    hasA=false

Follow the Cleanup

  1. rawName starts as ada .
  2. Trimming spaces makes trimmed equal ada.
  3. Uppercasing makes display equal ADA.
  4. count is 3.
  5. display.contains("A") is true, so the program prints hasA=true. | rawName | display | count | hasA | | --- | --- | --- | --- | | ada | ADA | 3 | true | | grace | GRACE | 5 | true | | linus | LINUS | 5 | false |
string methods Methods such as `trimmingCharacters(in:)` and `uppercased()` return new string values without changing the original string.

Exercise: string_operations.swift

Reproduce display=ADA, count=3, and hasA=true, then use grace and linus to predict each row.