Case and Trim
Strings are immutable: .upper() and .lower() return a transformed copy —
the original string does not change. This makes normalization patterns safe: for
example, lowercasing everything before a comparison:
.upper / .lower for case conversion; .trim / .trim_start / .trim_end to strip whitespace.
05-case-and-trim.zolo
// Feature: Case conversion and whitespace trimming
// Syntax: `s.upper()`, `s.lower()`, `s.trim()`, `s.trim_start()`, `s.trim_end()`
// When to use: normalize input, case-insensitive comparisons, clean input.
// -- upper / lower ---------------------------------------------
print("zolo".upper())
// expected: ZOLO
print("ZOLO".lower())
// expected: zolo
// Strings are immutable — methods return a transformed copy.
let s = "MiXed"
let u = s.upper()
print(u) // MIXED
print(s) // MiXed (original untouched)
// Case-insensitive comparison.
let input = "ADMIN"
let role = "admin"
print(input.lower() == role.lower())
// expected: true
// -- trim — removes whitespace from both ends ------------------
let pad = " hello "
print("'{pad.trim()}'")
// expected: 'hello'
// Only one side:
print("'{pad.trim_start()}'") // 'hello '
print("'{pad.trim_end()}'") // ' hello'
// Useful for cleaning user input.
let raw = " alice@email.com "
let email = raw.trim().lower()
print(email)
// expected: alice@email.com
Challenge
Take an input with extra spaces and mixed case, such as " ZoLo LaNG ". Use
.trim() and .lower() chained together to normalize it to "zolo lang".
See also