Advanced strings in Elixir

Contents
Heredocs
Graphemes vs bytes
Trim and pad
Inspect anything

Heredocs

Triple quoted heredocs hold multi line text without escape noise. The closing quotes set the indentation baseline, and extra leading spaces on each line fall away.

text = """ line one line two """

The variable text holds both lines joined by a newline, ready for templates and messages. Heredocs shine for embedded queries and sample documents that span several lines.

Graphemes vs bytes

Elixir strings are UTF-8 binaries, so one visible character can occupy several bytes. String.length counts characters you see, while byte_size counts raw storage bytes underneath.

String.length("héllo") byte_size("héllo")

The accented word measures 5 characters but 6 bytes, because the accented letter needs two bytes. Think in graphemes for display logic and in bytes only for storage math.

Trim and pad

Trim removes surrounding whitespace and pad grows short text to a target width. Together they tidy user input and align columns in plain text reports.

" hi " |> String.trim() |> String.pad_leading(6, "0")

Trimming leaves hi, and padding fills the width of 6 with zeros on the left. Sibling functions pad_trailing and trim with custom characters cover the mirrored cases.

Inspect anything

Inspect converts any value into readable text for logs and debugging sessions. IO.inspect prints the value and returns it unchanged, so it slips into pipelines without disturbing them.

IO.inspect([1, 2, 3], label: "nums")

Running the line prints the labelled list and hands the same list back to the caller. Keep inspect calls in study code and swap them for a real logger before shipping.

Next: Sigils

Article author: Arthur Isaev

Related articles
Elixir
Elixir course: zero to hero in 50 lessons
What is Elixir and where it runs
Install Elixir
iex: the interactive shell
Your first script
Variables
Numbers
Strings
Atoms
Truthiness: only false and nil
Conditions
Recursion replaces loops
Lists
Tuples
Maps
Keyword lists
Functions
Defaults and clauses
Pattern matching
case
with chains
Modules in Elixir
import, alias, require, use in Elixir
Structs in Elixir
Protocols in Elixir
Behaviours in Elixir
The pipe operator in Elixir
Enum in Elixir
Stream in Elixir
Comprehensions in Elixir
Advanced strings in Elixir
Sigils
Binaries and charlists
Exceptions
ok and error tuples
Files and IO
Processes
GenServer
Supervisors
Tasks and Agents
OTP applications
Mix projects
Dependencies
Testing with ExUnit
Doctests
Debugging
Configs
Releases
Capstone: todo CLI
Capstone: HTTP server
Hero roadmap: the whole course on one page
Install Elixir on Windows 11
Install Elixir on Ubuntu
Install Elixir on Rocky Linux
Install Elixir on macOS
Install Elixir on FreeBSD
Elixir in Docker

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: