gleam/string

Strings in Gleam are UTF-8 binaries. They can be written in your code a text surrounded by "double quotes".

Types

String

pub type String =
  String

UtfCodepoint

A UtfCodepoint is the integer representation of a valid UTF codepoint

pub type UtfCodepoint =
  UtfCodepoint

Functions

append

pub fn append(to first: String, suffix second: String) -> String

Create a new string by joining two strings together.

This function copies both strings and runs in linear time. If you find yourself joining strings frequently consider using the string_builder module as it can append strings much faster!

Examples

> append(to: "butter", suffix: "fly")
"butterfly"

compare

pub external fn compare(String, String) -> order.Order

Compares two strings to see which is "larger" by comparing their graphemes.

This does not compare the size or length of the given strings.

Examples

> compare("Anthony", "Anthony")
order.Eq

> compare("A", "B")
order.Gt

concat

pub fn concat(strings: List(String)) -> String

Create a new string by joining many strings together.

This function copies both strings and runs in linear time. If you find yourself joining strings frequently consider using the string_builder module as it can append strings much faster!

Examples

> concat(["never", "the", "less"])
"nevertheless"

contains

pub fn contains(
  does haystack: String,
  contain needle: String,
) -> Bool

Check if the first string contains the second.

Examples

> contains(does: "theory", contain: "ory")
True

> contains(does: "theory", contain: "the")
True

> contains(does: "theory", contain: "THE")
False

drop_left

pub fn drop_left(
  from string: String,
  up_to num_graphemes: Int,
) -> String

Drop n Graphemes from the left side of a string.

Examples

> drop_left(from: "The Lone Gunmen", up_to: 2)
"e Lone Gunmen"

drop_right

pub fn drop_right(
  from string: String,
  up_to num_graphemes: Int,
) -> String

Drop n Graphemes from the right side of a string.

Examples

> drop_right(from: "Cigarette Smoking Man", up_to: 2)
"Cigarette Smoking M"

ends_with

pub external fn ends_with(String, String) -> Bool

See if the first string ends with the second one.

Examples

> ends_with("theory", "ory")
True

is_empty

pub fn is_empty(str: String) -> Bool

Determine if a string is empty.

Examples

> is_empty("")
True

> is_empty("the world")
False

join

pub fn join(
  strings: List(String),
  with separator: String,
) -> String

Join many strings together with a given separator.

This function runs in linear time.

Examples

> join(["home","evan","Desktop"], with: "/")
"home/evan/Desktop"

length

pub external fn length(String) -> Int

Get the number of grapheme clusters in a given string.

This function has to iterate across the whole string to count the number of graphemes, so it runs in linear time.

Examples

> length("Gleam")
5

> length("ß↑e̊")
3

> length("")
0

lowercase

pub external fn lowercase(String) -> String

Create a new string with all the graphemes in the input string converted to lowercase.

Useful for case-insensitive comparisons.

Examples

> lowercase("X-FILES")
"x-files"

pad_left

pub fn pad_left(
  string: String,
  to length: Int,
  with pad_string: String,
) -> String

Pad a string on the left until it has at least given number of Graphemes.

Examples

> pad_left("121", to: 5, with: ".")
"..121"

> pad_left("121", to: 3, with: ".")
"121"

> pad_left("121", to: 2, with: ".")
"121"

pad_right

pub fn pad_right(
  string: String,
  to length: Int,
  with pad_string: String,
) -> String

Pad a string on the right until it has a given length.

Examples

> pad_right("121", to: 5, with: ".")
"121.."

> pad_right("121", to: 3, with: ".")
"121"

> pad_right("121", to: 2, with: ".")
"121"

pop_grapheme

pub external fn pop_grapheme(
  string: String,
) -> Result(tuple(String, String), Nil)

Split a non-empty string into its head and tail. This lets you pattern match on strings exactly as you would with lists.

Examples

> pop_grapheme("gleam")
Ok(tuple("g", "leam"))

> pop_grapheme("")
Error(Nil)

repeat

pub fn repeat(string: String, times times: Int) -> String

Create a new string by repeating a string a given number of times.

This function runs in linear time.

Examples

> repeat("ha", times: 3)
"hahaha"

replace

pub fn replace(
  in string: String,
  each pattern: String,
  with substitute: String,
) -> String

Create a new string by replacing all occurrences of a given substring.

Examples

> replace("www.example.com", each: ".", with: "-")
"www-example-com"

> replace("a,b,c,d,e", each: ",", with: "/")
"a/b/c/d/e"

reverse

pub fn reverse(string: String) -> String

Reverse a string.

This function has to iterate across the whole string so it runs in linear time.

Examples

> reverse("stressed")
"desserts"

slice

pub fn slice(
  from string: String,
  at_index idx: Int,
  length len: Int,
) -> String

Take a substring given a start and end Grapheme indexes. Negative indexes are taken starting from the end of the list.

Examples

> slice(from: "gleam", at_index: 1, length: 2)
"le"

> slice(from: "gleam", at_index: 1, length: 10)
"leam"

> slice(from: "gleam", at_index: 10, length: 3)
""

> slice(from: "gleam", at_index: -2, length: 2)
"am"

> slice(from: "gleam", at_index: -12, length: 2)
""

split

pub fn split(x: String, on substring: String) -> List(String)

Create a list of strings by splitting a given string on a given substring.

Examples

> split("home/gleam/desktop/", on: "/")
["home", "gleam", "desktop", ""]

split_once

pub fn split_once(
  x: String,
  on substring: String,
) -> Result(tuple(String, String), Nil)

Splits a string a single time on the given substring.

Returns an error if substring not present.

Examples

> split_once("home/gleam/desktop/", on: "/")
Ok(tuple("home", "gleam/desktop/"))

> split_once("home/gleam/desktop/", on: "?")
Error(Nil)

starts_with

pub external fn starts_with(String, String) -> Bool

See if the first string starts with the second one.

Examples

> starts_with("theory", "ory")
False

to_graphemes

pub fn to_graphemes(string: String) -> List(String)

Convert a string to a list of Graphemes.

> to_graphemes("abc")
["a", "b", "c"]

trim

pub fn trim(string: String) -> String

Get rid of whitespace on both sides of a String.

Examples

> trim("  hats  \n")
"hats"

trim_left

pub fn trim_left(string: String) -> String

Get rid of whitespace on the left of a String.

Examples

> trim_left("  hats  \n")
"hats  \n"

trim_right

pub fn trim_right(string: String) -> String

Get rid of whitespace on the right of a String.

Examples

> trim_right("  hats  \n")
"  hats"

uppercase

pub external fn uppercase(String) -> String

Create a new string with all the graphemes in the input string converted to uppercase.

Useful for case-insensitive comparisons and VIRTUAL YELLING.

Examples

> uppercase("skinner")
"SKINNER"

utf_codepoint

pub fn utf_codepoint(value: Int) -> Result(UtfCodepoint, Nil)

Convert an integer to a UtfCodepoint

Returns an error if the integer does not represent a valid UTF codepoint.