Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-release > by-pkgid > 016232f1d9a3f7bee85855d35a2bca58 > files > 110

elixir-doc-1.7.2-1.mga7.noarch.rpm

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="generator" content="ExDoc v0.19.1">
    <title>String – Elixir v1.7.2</title>
    <link rel="stylesheet" href="dist/app-240d7fc7e5.css" />
      <link rel="canonical" href="https://hexdocs.pm/elixir/v1.7/String.html" />
    <script src="dist/sidebar_items-cdf4e58b19.js"></script>
    
  </head>
  <body data-type="modules">
    <script>try { if(localStorage.getItem('night-mode')) document.body.className += ' night-mode'; } catch (e) { }</script>
    <div class="main">
<button class="sidebar-button sidebar-toggle">
  <span class="icon-menu" aria-hidden="true"></span>
  <span class="sr-only">Toggle Sidebar</span>
</button>
<button class="sidebar-button night-mode-toggle">
  <span class="icon-theme" aria-hidden="true"></span>
  <span class="sr-only">Toggle Theme</span>
</button>
<section class="sidebar">

  <a href="http://elixir-lang.org/docs.html" class="sidebar-projectLink">
    <div class="sidebar-projectDetails">
      <h1 class="sidebar-projectName">
Elixir      </h1>
      <h2 class="sidebar-projectVersion">
        v1.7.2
      </h2>
    </div>
      <img src="assets/logo.png" alt="Elixir" class="sidebar-projectImage">
  </a>

  <form class="sidebar-search" action="search.html">
    <button type="submit" class="search-button">
      <span class="icon-search" aria-hidden="true"></span>
    </button>
    <input name="q" type="text" id="search-list" class="search-input" placeholder="Search" aria-label="Search" autocomplete="off" />
  </form>

  <ul class="sidebar-listNav">
    <li><a id="extras-list" href="#full-list">Pages</a></li>

      <li><a id="modules-list" href="#full-list">Modules</a></li>

      <li><a id="exceptions-list" href="#full-list">Exceptions</a></li>

  </ul>
  <div class="gradient"></div>
  <ul id="full-list" class="sidebar-fullList"></ul>
</section>

<section class="content">
  <div class="content-outer">
    <div id="content" class="content-inner">


      <h1>
        <small class="visible-xs">Elixir v1.7.2</small>
String        
          <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L3" title="View Source" class="view-source" rel="help">
            <span class="icon-code" aria-hidden="true"></span>
            <span class="sr-only">View Source</span>
          </a>
      </h1>


        <section id="moduledoc">
<p>A String in Elixir is a UTF-8 encoded binary.</p>
<h2 id="module-codepoints-and-grapheme-cluster" class="section-heading">
  <a href="#module-codepoints-and-grapheme-cluster" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Codepoints and grapheme cluster
</h2>

<p>The functions in this module act according to the Unicode
Standard, version 11.0.0.</p>
<p>As per the standard, a codepoint is a single Unicode Character,
which may be represented by one or more bytes.</p>
<p>For example, the codepoint “é” is two bytes:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">byte_size</span><span class="p" data-group-id="9390844037-1">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="9390844037-1">)</span><span class="w">
</span><span class="mi">2</span></code></pre>
<p>However, this module returns the proper length:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="5756051619-1">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="5756051619-1">)</span><span class="w">
</span><span class="mi">1</span></code></pre>
<p>Furthermore, this module also presents the concept of grapheme cluster
(from now on referenced as graphemes). Graphemes can consist of multiple
codepoints that may be perceived as a single character by readers. For
example, “é” can be represented either as a single “e with acute” codepoint
or as the letter “e” followed by a “combining acute accent” (two codepoints):</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;</span><span class="se">\u0065</span><span class="se">\u0301</span><span class="s">&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">byte_size</span><span class="p" data-group-id="1410957964-1">(</span><span class="n">string</span><span class="p" data-group-id="1410957964-1">)</span><span class="w">
</span><span class="mi">3</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="1410957964-2">(</span><span class="n">string</span><span class="p" data-group-id="1410957964-2">)</span><span class="w">
</span><span class="mi">1</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="1410957964-3">(</span><span class="n">string</span><span class="p" data-group-id="1410957964-3">)</span><span class="w">
</span><span class="p" data-group-id="1410957964-4">[</span><span class="s">&quot;e&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;́&quot;</span><span class="p" data-group-id="1410957964-4">]</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">graphemes</span><span class="p" data-group-id="1410957964-5">(</span><span class="n">string</span><span class="p" data-group-id="1410957964-5">)</span><span class="w">
</span><span class="p" data-group-id="1410957964-6">[</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="1410957964-6">]</span></code></pre>
<p>Although the example above is made of two characters, it is
perceived by users as one.</p>
<p>Graphemes can also be two characters that are interpreted
as one by some languages. For example, some languages may
consider “ch” as a single character. However, since this
information depends on the locale, it is not taken into account
by this module.</p>
<p>In general, the functions in this module rely on the Unicode
Standard, but do not contain any of the locale specific behaviour.</p>
<p>More information about graphemes can be found in the <a href="http://www.unicode.org/reports/tr29/">Unicode
Standard Annex #29</a>.
The current Elixir version implements Extended Grapheme Cluster
algorithm.</p>
<p>For converting a binary to a different encoding and for Unicode
normalization mechanisms, see Erlang’s <code class="inline">:unicode</code> module.</p>
<h2 id="module-string-and-binary-operations" class="section-heading">
  <a href="#module-string-and-binary-operations" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  String and binary operations
</h2>

<p>To act according to the Unicode Standard, many functions
in this module run in linear time, as they need to traverse
the whole string considering the proper Unicode codepoints.</p>
<p>For example, <a href="String.html#length/1"><code class="inline">String.length/1</code></a> will take longer as
the input grows. On the other hand, <a href="Kernel.html#byte_size/1"><code class="inline">Kernel.byte_size/1</code></a> always runs
in constant time (i.e. regardless of the input size).</p>
<p>This means often there are performance costs in using the
functions in this module, compared to the more low-level
operations that work directly with binaries:</p>
<ul>
<li><a href="Kernel.html#binary_part/3"><code class="inline">Kernel.binary_part/3</code></a> - retrieves part of the binary
</li>
<li><a href="Kernel.html#bit_size/1"><code class="inline">Kernel.bit_size/1</code></a> and <a href="Kernel.html#byte_size/1"><code class="inline">Kernel.byte_size/1</code></a> - size related functions
</li>
<li><a href="Kernel.html#is_bitstring/1"><code class="inline">Kernel.is_bitstring/1</code></a> and <a href="Kernel.html#is_binary/1"><code class="inline">Kernel.is_binary/1</code></a> - type checking function
</li>
<li>Plus a number of functions for working with binaries (bytes)
in the <a href="http://www.erlang.org/doc/man/binary.html"><code class="inline">:binary</code> module</a>
</li>
</ul>
<p>There are many situations where using the <a href="String.html#content"><code class="inline">String</code></a> module can
be avoided in favor of binary functions or pattern matching.
For example, imagine you have a string <code class="inline">prefix</code> and you want to
remove this prefix from another string named <code class="inline">full</code>.</p>
<p>One may be tempted to write:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="8133005125-1">fn</span><span class="w"> </span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">-&gt;</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">base</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="8133005125-2">(</span><span class="n">prefix</span><span class="p" data-group-id="8133005125-2">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8133005125-3">(</span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">,</span><span class="w"> </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="8133005125-4">(</span><span class="n">full</span><span class="p" data-group-id="8133005125-4">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">base</span><span class="p" data-group-id="8133005125-3">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="k" data-group-id="8133005125-1">end</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="o">.</span><span class="p" data-group-id="8133005125-5">(</span><span class="s">&quot;Mr. John&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Mr. &quot;</span><span class="p" data-group-id="8133005125-5">)</span><span class="w">
</span><span class="s">&quot;John&quot;</span></code></pre>
<p>Although the function above works, it performs poorly. To
calculate the length of the string, we need to traverse it
fully, so we traverse both <code class="inline">prefix</code> and <code class="inline">full</code> strings, then
slice the <code class="inline">full</code> one, traversing it again.</p>
<p>A first attempt at improving it could be with ranges:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="7663332408-1">fn</span><span class="w"> </span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">-&gt;</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">base</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="7663332408-2">(</span><span class="n">prefix</span><span class="p" data-group-id="7663332408-2">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="7663332408-3">(</span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="o">.</span><span class="o">.</span><span class="o">-</span><span class="mi">1</span><span class="p" data-group-id="7663332408-3">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="k" data-group-id="7663332408-1">end</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="o">.</span><span class="p" data-group-id="7663332408-4">(</span><span class="s">&quot;Mr. John&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Mr. &quot;</span><span class="p" data-group-id="7663332408-4">)</span><span class="w">
</span><span class="s">&quot;John&quot;</span></code></pre>
<p>While this is much better (we don’t traverse <code class="inline">full</code> twice),
it could still be improved. In this case, since we want to
extract a substring from a string, we can use <a href="Kernel.html#byte_size/1"><code class="inline">Kernel.byte_size/1</code></a>
and <a href="Kernel.html#binary_part/3"><code class="inline">Kernel.binary_part/3</code></a> as there is no chance we will slice in
the middle of a codepoint made of more than one byte:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="6270449393-1">fn</span><span class="w"> </span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">-&gt;</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">base</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">byte_size</span><span class="p" data-group-id="6270449393-2">(</span><span class="n">prefix</span><span class="p" data-group-id="6270449393-2">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">binary_part</span><span class="p" data-group-id="6270449393-3">(</span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">,</span><span class="w"> </span><span class="n">byte_size</span><span class="p" data-group-id="6270449393-4">(</span><span class="n">full</span><span class="p" data-group-id="6270449393-4">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">base</span><span class="p" data-group-id="6270449393-3">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="k" data-group-id="6270449393-1">end</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="o">.</span><span class="p" data-group-id="6270449393-5">(</span><span class="s">&quot;Mr. John&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Mr. &quot;</span><span class="p" data-group-id="6270449393-5">)</span><span class="w">
</span><span class="s">&quot;John&quot;</span></code></pre>
<p>Or simply use pattern matching:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="5617558663-1">fn</span><span class="w"> </span><span class="n">full</span><span class="p">,</span><span class="w"> </span><span class="n">prefix</span><span class="w"> </span><span class="o">-&gt;</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">base</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">byte_size</span><span class="p" data-group-id="5617558663-2">(</span><span class="n">prefix</span><span class="p" data-group-id="5617558663-2">)</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="p" data-group-id="5617558663-3">&lt;&lt;</span><span class="bp">_</span><span class="o">::</span><span class="n">binary</span><span class="o">-</span><span class="n">size</span><span class="p" data-group-id="5617558663-4">(</span><span class="n">base</span><span class="p" data-group-id="5617558663-4">)</span><span class="p">,</span><span class="w"> </span><span class="n">rest</span><span class="o">::</span><span class="n">binary</span><span class="p" data-group-id="5617558663-3">&gt;&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">full</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="w">  </span><span class="n">rest</span><span class="w">
</span><span class="gp unselectable">...&gt; </span><span class="k" data-group-id="5617558663-1">end</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">take_prefix</span><span class="o">.</span><span class="p" data-group-id="5617558663-5">(</span><span class="s">&quot;Mr. John&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Mr. &quot;</span><span class="p" data-group-id="5617558663-5">)</span><span class="w">
</span><span class="s">&quot;John&quot;</span></code></pre>
<p>On the other hand, if you want to dynamically slice a string
based on an integer value, then using <a href="String.html#slice/3"><code class="inline">String.slice/3</code></a> is the
best option as it guarantees we won’t incorrectly split a valid
codepoint into multiple bytes.</p>
<h2 id="module-integer-codepoints" class="section-heading">
  <a href="#module-integer-codepoints" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Integer codepoints
</h2>

<p>Although codepoints could be represented as integers, this
module represents all codepoints as strings. For example:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="5726039749-1">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="5726039749-1">)</span><span class="w">
</span><span class="p" data-group-id="5726039749-2">[</span><span class="s">&quot;o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;l&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;á&quot;</span><span class="p" data-group-id="5726039749-2">]</span></code></pre>
<p>There are a couple of ways to retrieve a character integer
codepoint. One may use the <code class="inline">?</code> construct:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="sc">?o</span><span class="w">
</span><span class="mi">111</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="sc">?á</span><span class="w">
</span><span class="mi">225</span></code></pre>
<p>Or also via pattern matching:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="p" data-group-id="4260752956-1">&lt;&lt;</span><span class="n">aacute</span><span class="o">::</span><span class="n">utf8</span><span class="p" data-group-id="4260752956-1">&gt;&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;á&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">aacute</span><span class="w">
</span><span class="mi">225</span></code></pre>
<p>As we have seen above, codepoints can be inserted into
a string by their hexadecimal code:</p>
<pre><code class="nohighlight makeup elixir"><span class="s">&quot;ol</span><span class="se">\u0061</span><span class="se">\u0301</span><span class="s">&quot;</span><span class="w"> </span><span class="c1">#=&gt;</span><span class="w">
</span><span class="s">&quot;olá&quot;</span></code></pre>
<h2 id="module-self-synchronization" class="section-heading">
  <a href="#module-self-synchronization" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Self-synchronization
</h2>

<p>The UTF-8 encoding is self-synchronizing. This means that
if malformed data (i.e., data that is not possible according
to the definition of the encoding) is encountered, only one
codepoint needs to be rejected.</p>
<p>This module relies on this behaviour to ignore such invalid
characters. For example, <a href="#length/1"><code class="inline">length/1</code></a> will return
a correct result even if an invalid codepoint is fed into it.</p>
<p>In other words, this module expects invalid data to be detected
elsewhere, usually when retrieving data from the external source.
For example, a driver that reads strings from a database will be
responsible to check the validity of the encoding. <a href="String.html#chunk/2"><code class="inline">String.chunk/2</code></a>
can be used for breaking a string into valid and invalid parts.</p>
<h2 id="module-patterns" class="section-heading">
  <a href="#module-patterns" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Patterns
</h2>

<p>Many functions in this module work with patterns. For example,
<a href="String.html#split/2"><code class="inline">String.split/2</code></a> can split a string into multiple patterns given
a pattern. This pattern can be a string, a list of strings or
a compiled pattern:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5406966056-1">(</span><span class="s">&quot;foo bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; &quot;</span><span class="p" data-group-id="5406966056-1">)</span><span class="w">
</span><span class="p" data-group-id="5406966056-2">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p" data-group-id="5406966056-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5406966056-3">(</span><span class="s">&quot;foo bar!&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="5406966056-4">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;!&quot;</span><span class="p" data-group-id="5406966056-4">]</span><span class="p" data-group-id="5406966056-3">)</span><span class="w">
</span><span class="p" data-group-id="5406966056-5">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="5406966056-5">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="5406966056-6">(</span><span class="p" data-group-id="5406966056-7">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;!&quot;</span><span class="p" data-group-id="5406966056-7">]</span><span class="p" data-group-id="5406966056-6">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5406966056-8">(</span><span class="s">&quot;foo bar!&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p" data-group-id="5406966056-8">)</span><span class="w">
</span><span class="p" data-group-id="5406966056-9">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="5406966056-9">]</span></code></pre>
<p>The compiled pattern is useful when the same match will
be done over and over again. Note though the compiled
pattern cannot be stored in a module attribute as the pattern
is generated at runtime and does not survive compile term.</p>
        </section>

        <section id="summary" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#summary">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Summary
          </h1>
  <div class="summary-types summary">
    <h2>
      <a href="#types">Types</a>
    </h2>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:codepoint/0">codepoint()</a>
  </div>
    <div class="summary-synopsis"><p>A UTF-8 codepoint. It may be one or more bytes</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:grapheme/0">grapheme()</a>
  </div>
    <div class="summary-synopsis"><p>Multiple codepoints that may be perceived as a single character by readers</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:pattern/0">pattern()</a>
  </div>
    <div class="summary-synopsis"><p>Pattern used in functions like <a href="#replace/3"><code class="inline">replace/3</code></a> and <a href="#split/2"><code class="inline">split/2</code></a></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:t/0">t()</a>
  </div>
    <div class="summary-synopsis"><p>A UTF-8 encoded binary</p>
</div>
</div>
  </div>
          
  <div class="summary-functions summary">
    <h2>
      <a href="#functions">Functions</a>
    </h2>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#at/2">at(string, position)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the grapheme at the <code class="inline">position</code> of the given UTF-8 <code class="inline">string</code>.
If <code class="inline">position</code> is greater than <code class="inline">string</code> length, then it returns <code class="inline">nil</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#capitalize/2">capitalize(string, mode \\ :default)</a>
  </div>
    <div class="summary-synopsis"><p>Converts the first character in the given string to
uppercase and the remainder to lowercase according to <code class="inline">mode</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#chunk/2">chunk(string, trait)</a>
  </div>
    <div class="summary-synopsis"><p>Splits the string into chunks of characters that share a common trait</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#codepoints/1">codepoints(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns all codepoints in the string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#contains?/2">contains?(string, contents)</a>
  </div>
    <div class="summary-synopsis"><p>Checks if <code class="inline">string</code> contains any of the given <code class="inline">contents</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#downcase/2">downcase(string, mode \\ :default)</a>
  </div>
    <div class="summary-synopsis"><p>Converts all characters in the given string to lowercase according to <code class="inline">mode</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#duplicate/2">duplicate(subject, n)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string <code class="inline">subject</code> duplicated <code class="inline">n</code> times</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#ends_with?/2">ends_with?(string, suffix)</a>
  </div>
    <div class="summary-synopsis"><p>Returns <code class="inline">true</code> if <code class="inline">string</code> ends with any of the suffixes given</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#equivalent?/2">equivalent?(string1, string2)</a>
  </div>
    <div class="summary-synopsis"><p>Returns <code class="inline">true</code> if <code class="inline">string1</code> is canonically equivalent to ‘string2’</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#first/1">first(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the first grapheme from a UTF-8 string,
<code class="inline">nil</code> if the string is empty</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#graphemes/1">graphemes(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns Unicode graphemes in the string as per Extended Grapheme
Cluster algorithm</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#jaro_distance/2">jaro_distance(string1, string2)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a float value between 0 (equates to no similarity) and 1 (is an exact match)
representing <a href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance">Jaro</a>
distance between <code class="inline">string1</code> and <code class="inline">string2</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#last/1">last(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the last grapheme from a UTF-8 string,
<code class="inline">nil</code> if the string is empty</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#length/1">length(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the number of Unicode graphemes in a UTF-8 string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#match?/2">match?(string, regex)</a>
  </div>
    <div class="summary-synopsis"><p>Checks if <code class="inline">string</code> matches the given regular expression</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#myers_difference/2">myers_difference(string1, string2)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a keyword list that represents an edit script</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#next_codepoint/1">next_codepoint(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the next codepoint in a string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#next_grapheme/1">next_grapheme(binary)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the next grapheme in a string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#next_grapheme_size/1">next_grapheme_size(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns the size of the next grapheme</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#normalize/2">normalize(string, form)</a>
  </div>
    <div class="summary-synopsis"><p>Converts all characters in <code class="inline">string</code> to Unicode normalization
form identified by <code class="inline">form</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#pad_leading/3">pad_leading(string, count, padding \\ [&quot; &quot;])</a>
  </div>
    <div class="summary-synopsis"><p>Returns a new string padded with a leading filler
which is made of elements from the <code class="inline">padding</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#pad_trailing/3">pad_trailing(string, count, padding \\ [&quot; &quot;])</a>
  </div>
    <div class="summary-synopsis"><p>Returns a new string padded with a trailing filler
which is made of elements from the <code class="inline">padding</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#printable?/2">printable?(string, character_limit \\ :infinity)</a>
  </div>
    <div class="summary-synopsis"><p>Checks if a string contains only printable characters up to <code class="inline">character_limit</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#replace/4">replace(subject, pattern, replacement, options \\ [])</a>
  </div>
    <div class="summary-synopsis"><p>Returns a new string created by replacing occurrences of <code class="inline">pattern</code> in
<code class="inline">subject</code> with <code class="inline">replacement</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#replace_leading/3">replace_leading(string, match, replacement)</a>
  </div>
    <div class="summary-synopsis"><p>Replaces all leading occurrences of <code class="inline">match</code> by <code class="inline">replacement</code> of <code class="inline">match</code> in <code class="inline">string</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#replace_prefix/3">replace_prefix(string, match, replacement)</a>
  </div>
    <div class="summary-synopsis"><p>Replaces prefix in <code class="inline">string</code> by <code class="inline">replacement</code> if it matches <code class="inline">match</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#replace_suffix/3">replace_suffix(string, match, replacement)</a>
  </div>
    <div class="summary-synopsis"><p>Replaces suffix in <code class="inline">string</code> by <code class="inline">replacement</code> if it matches <code class="inline">match</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#replace_trailing/3">replace_trailing(string, match, replacement)</a>
  </div>
    <div class="summary-synopsis"><p>Replaces all trailing occurrences of <code class="inline">match</code> by <code class="inline">replacement</code> in <code class="inline">string</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#reverse/1">reverse(string)</a>
  </div>
    <div class="summary-synopsis"><p>Reverses the graphemes in given string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#slice/2">slice(string, range)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a substring from the offset given by the start of the
range to the offset given by the end of the range</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#slice/3">slice(string, start, len)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a substring starting at the offset <code class="inline">start</code>, and of
length <code class="inline">len</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#split/1">split(binary)</a>
  </div>
    <div class="summary-synopsis"><p>Divides a string into substrings at each Unicode whitespace
occurrence with leading and trailing whitespace ignored. Groups
of whitespace are treated as a single occurrence. Divisions do
not occur on non-breaking whitespace</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#split/3">split(string, pattern, options \\ [])</a>
  </div>
    <div class="summary-synopsis"><p>Divides a string into substrings based on a pattern</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#split_at/2">split_at(string, position)</a>
  </div>
    <div class="summary-synopsis"><p>Splits a string into two at the specified offset. When the offset given is
negative, location is counted from the end of the string</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#splitter/3">splitter(string, pattern, options \\ [])</a>
  </div>
    <div class="summary-synopsis"><p>Returns an enumerable that splits a string on demand</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#starts_with?/2">starts_with?(string, prefix)</a>
  </div>
    <div class="summary-synopsis"><p>Returns <code class="inline">true</code> if <code class="inline">string</code> starts with any of the prefixes given</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_atom/1">to_atom(string)</a>
  </div>
    <div class="summary-synopsis"><p>Converts a string to an atom</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_charlist/1">to_charlist(string)</a>
  </div>
    <div class="summary-synopsis"><p>Converts a string into a charlist</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_existing_atom/1">to_existing_atom(string)</a>
  </div>
    <div class="summary-synopsis"><p>Converts a string to an existing atom</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_float/1">to_float(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a float whose text representation is <code class="inline">string</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_integer/1">to_integer(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns an integer whose text representation is <code class="inline">string</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#to_integer/2">to_integer(string, base)</a>
  </div>
    <div class="summary-synopsis"><p>Returns an integer whose text representation is <code class="inline">string</code> in base <code class="inline">base</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim/1">trim(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all leading and trailing Unicode whitespaces
have been removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim/2">trim(string, to_trim)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all leading and trailing <code class="inline">to_trim</code>s have been
removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim_leading/1">trim_leading(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all leading Unicode whitespaces
have been removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim_leading/2">trim_leading(string, to_trim)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all leading <code class="inline">to_trim</code>s have been removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim_trailing/1">trim_trailing(string)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all trailing Unicode whitespaces
has been removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#trim_trailing/2">trim_trailing(string, to_trim)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a string where all trailing <code class="inline">to_trim</code>s have been removed</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#upcase/2">upcase(string, mode \\ :default)</a>
  </div>
    <div class="summary-synopsis"><p>Converts all characters in the given string to uppercase according to <code class="inline">mode</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#valid?/1">valid?(string)</a>
  </div>
    <div class="summary-synopsis"><p>Checks whether <code class="inline">string</code> contains only valid characters</p>
</div>
</div>
  </div>
          
        </section>

        <section id="types" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#types">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Types
          </h1>
          <div class="types-list">
<div class="detail" id="t:codepoint/0">
    <div class="detail-header">
    <a href="#t:codepoint/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">codepoint()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L216" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>codepoint() :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>A UTF-8 codepoint. It may be one or more bytes.</p>
  </section>
</div>
<div class="detail" id="t:grapheme/0">
    <div class="detail-header">
    <a href="#t:grapheme/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">grapheme()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L219" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>grapheme() :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Multiple codepoints that may be perceived as a single character by readers</p>
  </section>
</div>
<div class="detail" id="t:pattern/0">
    <div class="detail-header">
    <a href="#t:pattern/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">pattern()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L222" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>pattern() :: <a href="#t:t/0">t</a>() | [<a href="#t:t/0">t</a>()] | <a href="http://www.erlang.org/doc/man/binary.html#type-cp">:binary.cp</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Pattern used in functions like <a href="#replace/3"><code class="inline">replace/3</code></a> and <a href="#split/2"><code class="inline">split/2</code></a></p>
  </section>
</div>
<div class="detail" id="t:t/0">
    <div class="detail-header">
    <a href="#t:t/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">t()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L213" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>t() :: <a href="typespecs.html#built-in-types">binary</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>A UTF-8 encoded binary.</p>
<p>Note <code class="inline">String.t()</code> and <code class="inline">binary()</code> are equivalent to analysis tools.
Although, for those reading the documentation, <code class="inline">String.t()</code> implies
it is a UTF-8 encoded binary.</p>
  </section>
</div>
          </div>
        </section>


        <section id="functions" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#functions">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Functions
          </h1>
<div class="detail" id="at/2">
    <div class="detail-header">
    <a href="#at/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">at(string, position)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1744" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>at(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">integer</a>()) :: <a href="#t:grapheme/0">grapheme</a>() | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the grapheme at the <code class="inline">position</code> of the given UTF-8 <code class="inline">string</code>.
If <code class="inline">position</code> is greater than <code class="inline">string</code> length, then it returns <code class="inline">nil</code>.</p>
<h2 id="at/2-examples" class="section-heading">
  <a href="#at/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">at</span><span class="p" data-group-id="0750384813-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="0750384813-1">)</span><span class="w">
</span><span class="s">&quot;e&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">at</span><span class="p" data-group-id="0750384813-2">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="0750384813-2">)</span><span class="w">
</span><span class="s">&quot;l&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">at</span><span class="p" data-group-id="0750384813-3">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="0750384813-3">)</span><span class="w">
</span><span class="no">nil</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">at</span><span class="p" data-group-id="0750384813-4">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p" data-group-id="0750384813-4">)</span><span class="w">
</span><span class="s">&quot;r&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">at</span><span class="p" data-group-id="0750384813-5">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">10</span><span class="p" data-group-id="0750384813-5">)</span><span class="w">
</span><span class="no">nil</span></code></pre>
  </section>
</div>
<div class="detail" id="capitalize/2">
  
    <span id="capitalize/1"></span>
  <div class="detail-header">
    <a href="#capitalize/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">capitalize(string, mode \\ :default)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L779" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>capitalize(<a href="#t:t/0">t</a>(), :default | :ascii | :greek) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts the first character in the given string to
uppercase and the remainder to lowercase according to <code class="inline">mode</code>.</p>
<p><code class="inline">mode</code> may be <code class="inline">:default</code>, <code class="inline">:ascii</code> or <code class="inline">:greek</code>. The <code class="inline">:default</code> mode considers
all non-conditional transformations outlined in the Unicode standard. <code class="inline">:ascii</code>
lowercases only the letters A to Z. <code class="inline">:greek</code> includes the context sensitive
mappings found in Greek.</p>
<h2 id="capitalize/2-examples" class="section-heading">
  <a href="#capitalize/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">capitalize</span><span class="p" data-group-id="5877966674-1">(</span><span class="s">&quot;abcd&quot;</span><span class="p" data-group-id="5877966674-1">)</span><span class="w">
</span><span class="s">&quot;Abcd&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">capitalize</span><span class="p" data-group-id="5877966674-2">(</span><span class="s">&quot;fin&quot;</span><span class="p" data-group-id="5877966674-2">)</span><span class="w">
</span><span class="s">&quot;Fin&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">capitalize</span><span class="p" data-group-id="5877966674-3">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="5877966674-3">)</span><span class="w">
</span><span class="s">&quot;Olá&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="chunk/2">
    <div class="detail-header">
    <a href="#chunk/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">chunk(string, trait)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1568" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>chunk(<a href="#t:t/0">t</a>(), :valid | :printable) :: [<a href="#t:t/0">t</a>()]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Splits the string into chunks of characters that share a common trait.</p>
<p>The trait can be one of two options:</p>
<ul>
<li><p><code class="inline">:valid</code> - the string is split into chunks of valid and invalid
character sequences</p>
</li>
<li><p><code class="inline">:printable</code> - the string is split into chunks of printable and
non-printable character sequences</p>
</li>
</ul>
<p>Returns a list of binaries each of which contains only one kind of
characters.</p>
<p>If the given string is empty, an empty list is returned.</p>
<h2 id="chunk/2-examples" class="section-heading">
  <a href="#chunk/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">chunk</span><span class="p" data-group-id="8681625503-1">(</span><span class="p" data-group-id="8681625503-2">&lt;&lt;</span><span class="sc">?a</span><span class="p">,</span><span class="w"> </span><span class="sc">?b</span><span class="p">,</span><span class="w"> </span><span class="sc">?c</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="8681625503-2">&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:valid</span><span class="p" data-group-id="8681625503-1">)</span><span class="w">
</span><span class="p" data-group-id="8681625503-3">[</span><span class="s">&quot;abc</span><span class="se">\0</span><span class="s">&quot;</span><span class="p" data-group-id="8681625503-3">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">chunk</span><span class="p" data-group-id="8681625503-4">(</span><span class="p" data-group-id="8681625503-5">&lt;&lt;</span><span class="sc">?a</span><span class="p">,</span><span class="w"> </span><span class="sc">?b</span><span class="p">,</span><span class="w"> </span><span class="sc">?c</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mh">0xFFFF</span><span class="o">::</span><span class="n">utf16</span><span class="p" data-group-id="8681625503-5">&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:valid</span><span class="p" data-group-id="8681625503-4">)</span><span class="w">
</span><span class="p" data-group-id="8681625503-6">[</span><span class="s">&quot;abc</span><span class="se">\0</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8681625503-7">&lt;&lt;</span><span class="mh">0xFFFF</span><span class="o">::</span><span class="n">utf16</span><span class="p" data-group-id="8681625503-7">&gt;&gt;</span><span class="p" data-group-id="8681625503-6">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">chunk</span><span class="p" data-group-id="8681625503-8">(</span><span class="p" data-group-id="8681625503-9">&lt;&lt;</span><span class="sc">?a</span><span class="p">,</span><span class="w"> </span><span class="sc">?b</span><span class="p">,</span><span class="w"> </span><span class="sc">?c</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mh">0x0FFFF</span><span class="o">::</span><span class="n">utf8</span><span class="p" data-group-id="8681625503-9">&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:printable</span><span class="p" data-group-id="8681625503-8">)</span><span class="w">
</span><span class="p" data-group-id="8681625503-10">[</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8681625503-11">&lt;&lt;</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mh">0x0FFFF</span><span class="o">::</span><span class="n">utf8</span><span class="p" data-group-id="8681625503-11">&gt;&gt;</span><span class="p" data-group-id="8681625503-10">]</span></code></pre>
  </section>
</div>
<div class="detail" id="codepoints/1">
    <div class="detail-header">
    <a href="#codepoints/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">codepoints(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1472" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>codepoints(<a href="#t:t/0">t</a>()) :: [<a href="#t:codepoint/0">codepoint</a>()]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns all codepoints in the string.</p>
<p>For details about codepoints and graphemes, see the <a href="String.html#content"><code class="inline">String</code></a> module documentation.</p>
<h2 id="codepoints/1-examples" class="section-heading">
  <a href="#codepoints/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="4810135737-1">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="4810135737-1">)</span><span class="w">
</span><span class="p" data-group-id="4810135737-2">[</span><span class="s">&quot;o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;l&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;á&quot;</span><span class="p" data-group-id="4810135737-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="4810135737-3">(</span><span class="s">&quot;оптими зации&quot;</span><span class="p" data-group-id="4810135737-3">)</span><span class="w">
</span><span class="p" data-group-id="4810135737-4">[</span><span class="s">&quot;о&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;п&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;т&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;и&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;м&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;и&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;з&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;а&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ц&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;и&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;и&quot;</span><span class="p" data-group-id="4810135737-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="4810135737-5">(</span><span class="s">&quot;ἅἪῼ&quot;</span><span class="p" data-group-id="4810135737-5">)</span><span class="w">
</span><span class="p" data-group-id="4810135737-6">[</span><span class="s">&quot;ἅ&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Ἢ&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ῼ&quot;</span><span class="p" data-group-id="4810135737-6">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="4810135737-7">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="4810135737-7">)</span><span class="w">
</span><span class="p" data-group-id="4810135737-8">[</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="4810135737-8">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">codepoints</span><span class="p" data-group-id="4810135737-9">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="4810135737-9">)</span><span class="w">
</span><span class="p" data-group-id="4810135737-10">[</span><span class="s">&quot;e&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;́&quot;</span><span class="p" data-group-id="4810135737-10">]</span></code></pre>
  </section>
</div>
<div class="detail" id="contains?/2">
    <div class="detail-header">
    <a href="#contains?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">contains?(string, contents)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2088" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>contains?(<a href="#t:t/0">t</a>(), <a href="#t:pattern/0">pattern</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Checks if <code class="inline">string</code> contains any of the given <code class="inline">contents</code>.</p>
<p><code class="inline">contents</code> can be either a string, a list of strings,
or a compiled pattern.</p>
<h2 id="contains?/2-examples" class="section-heading">
  <a href="#contains?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="1264681988-1">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;of&quot;</span><span class="p" data-group-id="1264681988-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="1264681988-2">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1264681988-3">[</span><span class="s">&quot;life&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;death&quot;</span><span class="p" data-group-id="1264681988-3">]</span><span class="p" data-group-id="1264681988-2">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="1264681988-4">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1264681988-5">[</span><span class="s">&quot;death&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;mercury&quot;</span><span class="p" data-group-id="1264681988-5">]</span><span class="p" data-group-id="1264681988-4">)</span><span class="w">
</span><span class="no">false</span></code></pre>
<p>The argument can also be a compiled pattern:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="4235496278-1">(</span><span class="p" data-group-id="4235496278-2">[</span><span class="s">&quot;life&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;death&quot;</span><span class="p" data-group-id="4235496278-2">]</span><span class="p" data-group-id="4235496278-1">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="4235496278-3">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p" data-group-id="4235496278-3">)</span><span class="w">
</span><span class="no">true</span></code></pre>
<p>An empty string will always match:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="8586159119-1">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="8586159119-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="8586159119-2">(</span><span class="s">&quot;elixir of life&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8586159119-3">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;other&quot;</span><span class="p" data-group-id="8586159119-3">]</span><span class="p" data-group-id="8586159119-2">)</span><span class="w">
</span><span class="no">true</span></code></pre>
<p>Note this function can match within or across grapheme boundaries.
For example, take the grapheme “é” which is made of the characters
“e” and the acute accent. The following returns <code class="inline">true</code>:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="2901087645-1">(</span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="2901087645-2">(</span><span class="s">&quot;é&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfd</span><span class="p" data-group-id="2901087645-2">)</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;e&quot;</span><span class="p" data-group-id="2901087645-1">)</span><span class="w">
</span><span class="no">true</span></code></pre>
<p>However, if “é” is represented by the single character “e with acute”
accent, then it will return <code class="inline">false</code>:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">contains?</span><span class="p" data-group-id="2080272325-1">(</span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="2080272325-2">(</span><span class="s">&quot;é&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfc</span><span class="p" data-group-id="2080272325-2">)</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;e&quot;</span><span class="p" data-group-id="2080272325-1">)</span><span class="w">
</span><span class="no">false</span></code></pre>
  </section>
</div>
<div class="detail" id="downcase/2">
  
    <span id="downcase/1"></span>
  <div class="detail-header">
    <a href="#downcase/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">downcase(string, mode \\ :default)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L740" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>downcase(<a href="#t:t/0">t</a>(), :default | :ascii | :greek) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts all characters in the given string to lowercase according to <code class="inline">mode</code>.</p>
<p><code class="inline">mode</code> may be <code class="inline">:default</code>, <code class="inline">:ascii</code> or <code class="inline">:greek</code>. The <code class="inline">:default</code> mode considers
all non-conditional transformations outlined in the Unicode standard. <code class="inline">:ascii</code>
lowercases only the letters A to Z. <code class="inline">:greek</code> includes the context sensitive
mappings found in Greek.</p>
<h2 id="downcase/2-examples" class="section-heading">
  <a href="#downcase/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="9636982780-1">(</span><span class="s">&quot;ABCD&quot;</span><span class="p" data-group-id="9636982780-1">)</span><span class="w">
</span><span class="s">&quot;abcd&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="9636982780-2">(</span><span class="s">&quot;AB 123 XPTO&quot;</span><span class="p" data-group-id="9636982780-2">)</span><span class="w">
</span><span class="s">&quot;ab 123 xpto&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="9636982780-3">(</span><span class="s">&quot;OLÁ&quot;</span><span class="p" data-group-id="9636982780-3">)</span><span class="w">
</span><span class="s">&quot;olá&quot;</span></code></pre>
<p>The <code class="inline">:ascii</code> mode ignores Unicode characters and provides a more
performant implementation when you know the string contains only
ASCII characters:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="7871292318-1">(</span><span class="s">&quot;OLÁ&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:ascii</span><span class="p" data-group-id="7871292318-1">)</span><span class="w">
</span><span class="s">&quot;olÁ&quot;</span></code></pre>
<p>And <code class="inline">:greek</code> properly handles the context sensitive sigma in Greek:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="3229603074-1">(</span><span class="s">&quot;ΣΣ&quot;</span><span class="p" data-group-id="3229603074-1">)</span><span class="w">
</span><span class="s">&quot;σσ&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">downcase</span><span class="p" data-group-id="3229603074-2">(</span><span class="s">&quot;ΣΣ&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:greek</span><span class="p" data-group-id="3229603074-2">)</span><span class="w">
</span><span class="s">&quot;σς&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="duplicate/2">
    <div class="detail-header">
    <a href="#duplicate/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">duplicate(subject, n)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1444" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>duplicate(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string <code class="inline">subject</code> duplicated <code class="inline">n</code> times.</p>
<p>Inlined by the compiler.</p>
<h2 id="duplicate/2-examples" class="section-heading">
  <a href="#duplicate/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">duplicate</span><span class="p" data-group-id="1113090690-1">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="1113090690-1">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">duplicate</span><span class="p" data-group-id="1113090690-2">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="1113090690-2">)</span><span class="w">
</span><span class="s">&quot;abc&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">duplicate</span><span class="p" data-group-id="1113090690-3">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1113090690-3">)</span><span class="w">
</span><span class="s">&quot;abcabc&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="ends_with?/2">
    <div class="detail-header">
    <a href="#ends_with?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">ends_with?(string, suffix)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2004" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>ends_with?(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>() | [<a href="#t:t/0">t</a>()]) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns <code class="inline">true</code> if <code class="inline">string</code> ends with any of the suffixes given.</p>
<p><code class="inline">suffixes</code> can be either a single suffix or a list of suffixes.</p>
<h2 id="ends_with?/2-examples" class="section-heading">
  <a href="#ends_with?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">ends_with?</span><span class="p" data-group-id="3577113782-1">(</span><span class="s">&quot;language&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;age&quot;</span><span class="p" data-group-id="3577113782-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">ends_with?</span><span class="p" data-group-id="3577113782-2">(</span><span class="s">&quot;language&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3577113782-3">[</span><span class="s">&quot;youth&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;age&quot;</span><span class="p" data-group-id="3577113782-3">]</span><span class="p" data-group-id="3577113782-2">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">ends_with?</span><span class="p" data-group-id="3577113782-4">(</span><span class="s">&quot;language&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3577113782-5">[</span><span class="s">&quot;youth&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="3577113782-5">]</span><span class="p" data-group-id="3577113782-4">)</span><span class="w">
</span><span class="no">false</span></code></pre>
<p>An empty suffix will always match:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">ends_with?</span><span class="p" data-group-id="9800493287-1">(</span><span class="s">&quot;language&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="9800493287-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">ends_with?</span><span class="p" data-group-id="9800493287-2">(</span><span class="s">&quot;language&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="9800493287-3">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;other&quot;</span><span class="p" data-group-id="9800493287-3">]</span><span class="p" data-group-id="9800493287-2">)</span><span class="w">
</span><span class="no">true</span></code></pre>
  </section>
</div>
<div class="detail" id="equivalent?/2">
    <div class="detail-header">
    <a href="#equivalent?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">equivalent?(string1, string2)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L606" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>equivalent?(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns <code class="inline">true</code> if <code class="inline">string1</code> is canonically equivalent to ‘string2’.</p>
<p>It performs Normalization Form Canonical Decomposition (NFD) on the
strings before comparing them. This function is equivalent to:</p>
<pre><code class="nohighlight makeup elixir"><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="1200624730-1">(</span><span class="n">string1</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfd</span><span class="p" data-group-id="1200624730-1">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="1200624730-2">(</span><span class="n">string2</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfd</span><span class="p" data-group-id="1200624730-2">)</span></code></pre>
<p>Therefore, if you plan to compare multiple strings, multiple times
in a row, you may normalize them upfront and compare them directly
to avoid multiple normalization passes.</p>
<h2 id="equivalent?/2-examples" class="section-heading">
  <a href="#equivalent?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">equivalent?</span><span class="p" data-group-id="2146794626-1">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;abc&quot;</span><span class="p" data-group-id="2146794626-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">equivalent?</span><span class="p" data-group-id="2146794626-2">(</span><span class="s">&quot;man</span><span class="se">\u0303</span><span class="s">ana&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;mañana&quot;</span><span class="p" data-group-id="2146794626-2">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">equivalent?</span><span class="p" data-group-id="2146794626-3">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ABC&quot;</span><span class="p" data-group-id="2146794626-3">)</span><span class="w">
</span><span class="no">false</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">equivalent?</span><span class="p" data-group-id="2146794626-4">(</span><span class="s">&quot;nø&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;nó&quot;</span><span class="p" data-group-id="2146794626-4">)</span><span class="w">
</span><span class="no">false</span></code></pre>
  </section>
</div>
<div class="detail" id="first/1">
    <div class="detail-header">
    <a href="#first/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">first(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1670" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>first(<a href="#t:t/0">t</a>()) :: <a href="#t:grapheme/0">grapheme</a>() | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the first grapheme from a UTF-8 string,
<code class="inline">nil</code> if the string is empty.</p>
<h2 id="first/1-examples" class="section-heading">
  <a href="#first/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">first</span><span class="p" data-group-id="9332958434-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="9332958434-1">)</span><span class="w">
</span><span class="s">&quot;e&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">first</span><span class="p" data-group-id="9332958434-2">(</span><span class="s">&quot;եոգլի&quot;</span><span class="p" data-group-id="9332958434-2">)</span><span class="w">
</span><span class="s">&quot;ե&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="graphemes/1">
    <div class="detail-header">
    <a href="#graphemes/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">graphemes(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1615" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>graphemes(<a href="#t:t/0">t</a>()) :: [<a href="#t:grapheme/0">grapheme</a>()]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns Unicode graphemes in the string as per Extended Grapheme
Cluster algorithm.</p>
<p>The algorithm is outlined in the <a href="http://www.unicode.org/reports/tr29/">Unicode Standard Annex #29,
Unicode Text Segmentation</a>.</p>
<p>For details about codepoints and graphemes, see the <a href="String.html#content"><code class="inline">String</code></a> module documentation.</p>
<h2 id="graphemes/1-examples" class="section-heading">
  <a href="#graphemes/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">graphemes</span><span class="p" data-group-id="0878190764-1">(</span><span class="s">&quot;Ńaïve&quot;</span><span class="p" data-group-id="0878190764-1">)</span><span class="w">
</span><span class="p" data-group-id="0878190764-2">[</span><span class="s">&quot;Ń&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ï&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;v&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;e&quot;</span><span class="p" data-group-id="0878190764-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">graphemes</span><span class="p" data-group-id="0878190764-3">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="0878190764-3">)</span><span class="w">
</span><span class="p" data-group-id="0878190764-4">[</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="0878190764-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">graphemes</span><span class="p" data-group-id="0878190764-5">(</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="0878190764-5">)</span><span class="w">
</span><span class="p" data-group-id="0878190764-6">[</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="0878190764-6">]</span></code></pre>
  </section>
</div>
<div class="detail" id="jaro_distance/2">
    <div class="detail-header">
    <a href="#jaro_distance/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">jaro_distance(string1, string2)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2254" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>jaro_distance(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="typespecs.html#basic-types">float</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a float value between 0 (equates to no similarity) and 1 (is an exact match)
representing <a href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance">Jaro</a>
distance between <code class="inline">string1</code> and <code class="inline">string2</code>.</p>
<p>The Jaro distance metric is designed and best suited for short strings such as person names.</p>
<h2 id="jaro_distance/2-examples" class="section-heading">
  <a href="#jaro_distance/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">jaro_distance</span><span class="p" data-group-id="1776977858-1">(</span><span class="s">&quot;dwayne&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;duane&quot;</span><span class="p" data-group-id="1776977858-1">)</span><span class="w">
</span><span class="mf">0.8222222222222223</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">jaro_distance</span><span class="p" data-group-id="1776977858-2">(</span><span class="s">&quot;even&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;odd&quot;</span><span class="p" data-group-id="1776977858-2">)</span><span class="w">
</span><span class="mf">0.0</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">jaro_distance</span><span class="p" data-group-id="1776977858-3">(</span><span class="s">&quot;same&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;same&quot;</span><span class="p" data-group-id="1776977858-3">)</span><span class="w">
</span><span class="mf">1.0</span></code></pre>
  </section>
</div>
<div class="detail" id="last/1">
    <div class="detail-header">
    <a href="#last/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">last(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1691" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>last(<a href="#t:t/0">t</a>()) :: <a href="#t:grapheme/0">grapheme</a>() | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the last grapheme from a UTF-8 string,
<code class="inline">nil</code> if the string is empty.</p>
<h2 id="last/1-examples" class="section-heading">
  <a href="#last/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">last</span><span class="p" data-group-id="0372255148-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="0372255148-1">)</span><span class="w">
</span><span class="s">&quot;r&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">last</span><span class="p" data-group-id="0372255148-2">(</span><span class="s">&quot;եոգլի&quot;</span><span class="p" data-group-id="0372255148-2">)</span><span class="w">
</span><span class="s">&quot;ի&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="length/1">
    <div class="detail-header">
    <a href="#length/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">length(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1714" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>length(<a href="#t:t/0">t</a>()) :: <a href="typespecs.html#basic-types">non_neg_integer</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the number of Unicode graphemes in a UTF-8 string.</p>
<h2 id="length/1-examples" class="section-heading">
  <a href="#length/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="3498119090-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="3498119090-1">)</span><span class="w">
</span><span class="mi">6</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">length</span><span class="p" data-group-id="3498119090-2">(</span><span class="s">&quot;եոգլի&quot;</span><span class="p" data-group-id="3498119090-2">)</span><span class="w">
</span><span class="mi">5</span></code></pre>
  </section>
</div>
<div class="detail" id="match?/2">
    <div class="detail-header">
    <a href="#match?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">match?(string, regex)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2033" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>match?(<a href="#t:t/0">t</a>(), <a href="Regex.html#t:t/0">Regex.t</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Checks if <code class="inline">string</code> matches the given regular expression.</p>
<h2 id="match?/2-examples" class="section-heading">
  <a href="#match?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="8028142424-1">(</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r/foo/</span><span class="p" data-group-id="8028142424-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">match?</span><span class="p" data-group-id="8028142424-2">(</span><span class="s">&quot;bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r/foo/</span><span class="p" data-group-id="8028142424-2">)</span><span class="w">
</span><span class="no">false</span></code></pre>
  </section>
</div>
<div class="detail" id="myers_difference/2">
    <div class="detail-header">
    <a href="#myers_difference/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">myers_difference(string1, string2)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2340" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>myers_difference(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: [{:eq | :ins | :del, <a href="#t:t/0">t</a>()}]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a keyword list that represents an edit script.</p>
<p>Check <a href="List.html#myers_difference/2"><code class="inline">List.myers_difference/2</code></a> for more information.</p>
<h2 id="myers_difference/2-examples" class="section-heading">
  <a href="#myers_difference/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">string1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;fox hops over the dog&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="n">string2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;fox jumps over the lazy cat&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">myers_difference</span><span class="p" data-group-id="5923708657-1">(</span><span class="n">string1</span><span class="p">,</span><span class="w"> </span><span class="n">string2</span><span class="p" data-group-id="5923708657-1">)</span><span class="w">
</span><span class="p" data-group-id="5923708657-2">[</span><span class="ss">eq</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;fox &quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">del</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;ho&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">ins</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;jum&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">eq</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;ps over the &quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">del</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;dog&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">ins</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;lazy cat&quot;</span><span class="p" data-group-id="5923708657-2">]</span></code></pre>
  </section>
</div>
<div class="detail" id="next_codepoint/1">
    <div class="detail-header">
    <a href="#next_codepoint/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">next_codepoint(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1494" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>next_codepoint(<a href="#t:t/0">t</a>()) :: {<a href="#t:codepoint/0">codepoint</a>(), <a href="#t:t/0">t</a>()} | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the next codepoint in a string.</p>
<p>The result is a tuple with the codepoint and the
remainder of the string or <code class="inline">nil</code> in case
the string reached its end.</p>
<p>As with other functions in the String module, this
function does not check for the validity of the codepoint.
That said, if an invalid codepoint is found, it will
be returned by this function.</p>
<h2 id="next_codepoint/1-examples" class="section-heading">
  <a href="#next_codepoint/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">next_codepoint</span><span class="p" data-group-id="4392131413-1">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="4392131413-1">)</span><span class="w">
</span><span class="p" data-group-id="4392131413-2">{</span><span class="s">&quot;o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;lá&quot;</span><span class="p" data-group-id="4392131413-2">}</span></code></pre>
  </section>
</div>
<div class="detail" id="next_grapheme/1">
    <div class="detail-header">
    <a href="#next_grapheme/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">next_grapheme(binary)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1633" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>next_grapheme(<a href="#t:t/0">t</a>()) :: {<a href="#t:grapheme/0">grapheme</a>(), <a href="#t:t/0">t</a>()} | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the next grapheme in a string.</p>
<p>The result is a tuple with the grapheme and the
remainder of the string or <code class="inline">nil</code> in case
the String reached its end.</p>
<h2 id="next_grapheme/1-examples" class="section-heading">
  <a href="#next_grapheme/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">next_grapheme</span><span class="p" data-group-id="3613385876-1">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="3613385876-1">)</span><span class="w">
</span><span class="p" data-group-id="3613385876-2">{</span><span class="s">&quot;o&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;lá&quot;</span><span class="p" data-group-id="3613385876-2">}</span></code></pre>
  </section>
</div>
<div class="detail" id="next_grapheme_size/1">
    <div class="detail-header">
    <a href="#next_grapheme_size/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">next_grapheme_size(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1654" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>next_grapheme_size(<a href="#t:t/0">t</a>()) :: {<a href="typespecs.html#basic-types">pos_integer</a>(), <a href="#t:t/0">t</a>()} | nil</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns the size of the next grapheme.</p>
<p>The result is a tuple with the next grapheme size and
the remainder of the string or <code class="inline">nil</code> in case the string
reached its end.</p>
<h2 id="next_grapheme_size/1-examples" class="section-heading">
  <a href="#next_grapheme_size/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">next_grapheme_size</span><span class="p" data-group-id="0044994150-1">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="0044994150-1">)</span><span class="w">
</span><span class="p" data-group-id="0044994150-2">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;lá&quot;</span><span class="p" data-group-id="0044994150-2">}</span></code></pre>
  </section>
</div>
<div class="detail" id="normalize/2">
    <div class="detail-header">
    <a href="#normalize/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">normalize(string, form)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L636" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>normalize(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">atom</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts all characters in <code class="inline">string</code> to Unicode normalization
form identified by <code class="inline">form</code>.</p>
<h2 id="normalize/2-forms" class="section-heading">
  <a href="#normalize/2-forms" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Forms
</h2>

<p>The supported forms are:</p>
<ul>
<li><p><code class="inline">:nfd</code> - Normalization Form Canonical Decomposition.
Characters are decomposed by canonical equivalence, and
multiple combining characters are arranged in a specific
order.</p>
</li>
<li><p><code class="inline">:nfc</code> - Normalization Form Canonical Composition.
Characters are decomposed and then recomposed by canonical equivalence.</p>
</li>
</ul>
<h2 id="normalize/2-examples" class="section-heading">
  <a href="#normalize/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="2980121235-1">(</span><span class="s">&quot;yêṩ&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfd</span><span class="p" data-group-id="2980121235-1">)</span><span class="w">
</span><span class="s">&quot;yêṩ&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="2980121235-2">(</span><span class="s">&quot;leña&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfc</span><span class="p" data-group-id="2980121235-2">)</span><span class="w">
</span><span class="s">&quot;leña&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="pad_leading/3">
  
    <span id="pad_leading/2"></span>
  <div class="detail-header">
    <a href="#pad_leading/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">pad_leading(string, count, padding \\ [&quot; &quot;])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1156" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>pad_leading(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>(), <a href="#t:t/0">t</a>() | [<a href="#t:t/0">t</a>()]) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a new string padded with a leading filler
which is made of elements from the <code class="inline">padding</code>.</p>
<p>Passing a list of strings as <code class="inline">padding</code> will take one element of the list
for every missing entry. If the list is shorter than the number of inserts,
the filling will start again from the beginning of the list.
Passing a string <code class="inline">padding</code> is equivalent to passing the list of graphemes in it.
If no <code class="inline">padding</code> is given, it defaults to whitespace.</p>
<p>When <code class="inline">count</code> is less than or equal to the length of <code class="inline">string</code>,
given <code class="inline">string</code> is returned.</p>
<p>Raises <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> if the given <code class="inline">padding</code> contains non-string element.</p>
<h2 id="pad_leading/3-examples" class="section-heading">
  <a href="#pad_leading/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_leading</span><span class="p" data-group-id="6820708761-1">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="6820708761-1">)</span><span class="w">
</span><span class="s">&quot;  abc&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_leading</span><span class="p" data-group-id="6820708761-2">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;12&quot;</span><span class="p" data-group-id="6820708761-2">)</span><span class="w">
</span><span class="s">&quot;1abc&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_leading</span><span class="p" data-group-id="6820708761-3">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;12&quot;</span><span class="p" data-group-id="6820708761-3">)</span><span class="w">
</span><span class="s">&quot;121abc&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_leading</span><span class="p" data-group-id="6820708761-4">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="6820708761-5">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;23&quot;</span><span class="p" data-group-id="6820708761-5">]</span><span class="p" data-group-id="6820708761-4">)</span><span class="w">
</span><span class="s">&quot;123abc&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="pad_trailing/3">
  
    <span id="pad_trailing/2"></span>
  <div class="detail-header">
    <a href="#pad_trailing/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">pad_trailing(string, count, padding \\ [&quot; &quot;])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1198" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>pad_trailing(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>(), <a href="#t:t/0">t</a>() | [<a href="#t:t/0">t</a>()]) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a new string padded with a trailing filler
which is made of elements from the <code class="inline">padding</code>.</p>
<p>Passing a list of strings as <code class="inline">padding</code> will take one element of the list
for every missing entry. If the list is shorter than the number of inserts,
the filling will start again from the beginning of the list.
Passing a string <code class="inline">padding</code> is equivalent to passing the list of graphemes in it.
If no <code class="inline">padding</code> is given, it defaults to whitespace.</p>
<p>When <code class="inline">count</code> is less than or equal to the length of <code class="inline">string</code>,
given <code class="inline">string</code> is returned.</p>
<p>Raises <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> if the given <code class="inline">padding</code> contains non-string element.</p>
<h2 id="pad_trailing/3-examples" class="section-heading">
  <a href="#pad_trailing/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_trailing</span><span class="p" data-group-id="4882670417-1">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="4882670417-1">)</span><span class="w">
</span><span class="s">&quot;abc  &quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_trailing</span><span class="p" data-group-id="4882670417-2">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;12&quot;</span><span class="p" data-group-id="4882670417-2">)</span><span class="w">
</span><span class="s">&quot;abc1&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_trailing</span><span class="p" data-group-id="4882670417-3">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;12&quot;</span><span class="p" data-group-id="4882670417-3">)</span><span class="w">
</span><span class="s">&quot;abc121&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">pad_trailing</span><span class="p" data-group-id="4882670417-4">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4882670417-5">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;23&quot;</span><span class="p" data-group-id="4882670417-5">]</span><span class="p" data-group-id="4882670417-4">)</span><span class="w">
</span><span class="s">&quot;abc123&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="printable?/2">
  
    <span id="printable?/1"></span>
  <div class="detail-header">
    <a href="#printable?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">printable?(string, character_limit \\ :infinity)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L249" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>printable?(<a href="#t:t/0">t</a>(), 0) :: true</pre>
          <pre>printable?(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">pos_integer</a>() | :infinity) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Checks if a string contains only printable characters up to <code class="inline">character_limit</code>.</p>
<p>Takes an optional <code class="inline">character_limit</code> as a second argument. If <code class="inline">character_limit</code> is <code class="inline">0</code>, this
function will return <code class="inline">true</code>.</p>
<h2 id="printable?/2-examples" class="section-heading">
  <a href="#printable?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">printable?</span><span class="p" data-group-id="1169152860-1">(</span><span class="s">&quot;abc&quot;</span><span class="p" data-group-id="1169152860-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">printable?</span><span class="p" data-group-id="1169152860-2">(</span><span class="s">&quot;abc&quot;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="p" data-group-id="1169152860-3">&lt;&lt;</span><span class="mi">0</span><span class="p" data-group-id="1169152860-3">&gt;&gt;</span><span class="p" data-group-id="1169152860-2">)</span><span class="w">
</span><span class="no">false</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">printable?</span><span class="p" data-group-id="1169152860-4">(</span><span class="s">&quot;abc&quot;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="p" data-group-id="1169152860-5">&lt;&lt;</span><span class="mi">0</span><span class="p" data-group-id="1169152860-5">&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1169152860-4">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">printable?</span><span class="p" data-group-id="1169152860-6">(</span><span class="s">&quot;abc&quot;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="p" data-group-id="1169152860-7">&lt;&lt;</span><span class="mi">0</span><span class="p" data-group-id="1169152860-7">&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="1169152860-6">)</span><span class="w">
</span><span class="no">true</span></code></pre>
  </section>
</div>
<div class="detail" id="replace/4">
  
    <span id="replace/3"></span>
  <div class="detail-header">
    <a href="#replace/4" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">replace(subject, pattern, replacement, options \\ [])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1356" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>replace(<a href="#t:t/0">t</a>(), <a href="#t:pattern/0">pattern</a>() | <a href="Regex.html#t:t/0">Regex.t</a>(), <a href="#t:t/0">t</a>(), <a href="typespecs.html#built-in-types">keyword</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a new string created by replacing occurrences of <code class="inline">pattern</code> in
<code class="inline">subject</code> with <code class="inline">replacement</code>.</p>
<p>The <code class="inline">pattern</code> may be a string, a regular expression, or a compiled pattern.</p>
<p>By default it replaces all occurrences but this behaviour can be controlled
through the <code class="inline">:global</code> option; see the “Options” section below.</p>
<h2 id="replace/4-options" class="section-heading">
  <a href="#replace/4-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Options
</h2>

<ul>
<li><p><code class="inline">:global</code> - (boolean) if <code class="inline">true</code>, all occurrences of <code class="inline">pattern</code> are replaced
with <code class="inline">replacement</code>, otherwise only the first occurrence is
replaced. Defaults to <code class="inline">true</code></p>
</li>
<li><p><code class="inline">:insert_replaced</code> - (integer or list of integers) specifies the position
where to insert the replaced part inside the <code class="inline">replacement</code>. If any
position given in the <code class="inline">:insert_replaced</code> option is larger than the
replacement string, or is negative, an <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> is raised. See the
examples below</p>
</li>
</ul>
<h2 id="replace/4-examples" class="section-heading">
  <a href="#replace/4-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="8375017034-1">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;-&quot;</span><span class="p" data-group-id="8375017034-1">)</span><span class="w">
</span><span class="s">&quot;a-b-c&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="8375017034-2">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;-&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">global</span><span class="p">:</span><span class="w"> </span><span class="no">false</span><span class="p" data-group-id="8375017034-2">)</span><span class="w">
</span><span class="s">&quot;a-b,c&quot;</span></code></pre>
<p>When the pattern is a regular expression, one can give <code class="inline">\N</code> or
<code class="inline">\g{N}</code> in the <code class="inline">replacement</code> string to access a specific capture in the
regular expression:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="6743661266-1">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r/,(.)/</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,</span><span class="se">\\</span><span class="s">1</span><span class="se">\\</span><span class="s">g{1}&quot;</span><span class="p" data-group-id="6743661266-1">)</span><span class="w">
</span><span class="s">&quot;a,bb,cc&quot;</span></code></pre>
<p>Notice we had to escape the backslash escape character (i.e., we used <code class="inline">\\N</code>
instead of just <code class="inline">\N</code> to escape the backslash; same thing for <code class="inline">\\g{N}</code>). By
giving <code class="inline">\0</code>, one can inject the whole matched pattern in the replacement
string.</p>
<p>When the pattern is a string, a developer can use the replaced part inside
the <code class="inline">replacement</code> by using the <code class="inline">:insert_replaced</code> option and specifying the
position(s) inside the <code class="inline">replacement</code> where the string pattern will be
inserted:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="7814126746-1">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;[]&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">insert_replaced</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="7814126746-1">)</span><span class="w">
</span><span class="s">&quot;a,[b],c&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="7814126746-2">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;[]&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">insert_replaced</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="7814126746-2">)</span><span class="w">
</span><span class="s">&quot;a[],b[],c&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="7814126746-3">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;[]&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">insert_replaced</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="7814126746-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="7814126746-4">]</span><span class="p" data-group-id="7814126746-3">)</span><span class="w">
</span><span class="s">&quot;a[,,]b[,,]c&quot;</span></code></pre>
<p>A compiled pattern can also be given:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="4571840149-1">(</span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="4571840149-1">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="4571840149-2">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;[]&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">insert_replaced</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="4571840149-2">)</span><span class="w">
</span><span class="s">&quot;a[],b[],c&quot;</span></code></pre>
<p>When an empty string is provided as a <code class="inline">pattern</code>, the function will treat it as
an implicit empty string between each grapheme and the string will be
interspersed. If an empty string is provided as <code class="inline">replacement</code> the <code class="inline">subject</code>
will be returned:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="7779256949-1">(</span><span class="s">&quot;ELIXIR&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;.&quot;</span><span class="p" data-group-id="7779256949-1">)</span><span class="w">
</span><span class="s">&quot;.E.L.I.X.I.R.&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="7779256949-2">(</span><span class="s">&quot;ELIXIR&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="7779256949-2">)</span><span class="w">
</span><span class="s">&quot;ELIXIR&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="replace_leading/3">
    <div class="detail-header">
    <a href="#replace_leading/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">replace_leading(string, match, replacement)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L820" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>replace_leading(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>() | <a href="typespecs.html#built-in-types">no_return</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Replaces all leading occurrences of <code class="inline">match</code> by <code class="inline">replacement</code> of <code class="inline">match</code> in <code class="inline">string</code>.</p>
<p>Returns the string untouched if there are no occurrences.</p>
<p>If <code class="inline">match</code> is <code class="inline">&quot;&quot;</code>, this function raises an <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> exception: this
happens because this function replaces <strong>all</strong> the occurrences of <code class="inline">match</code> at
the beginning of <code class="inline">string</code>, and it’s impossible to replace “multiple”
occurrences of <code class="inline">&quot;&quot;</code>.</p>
<h2 id="replace_leading/3-examples" class="section-heading">
  <a href="#replace_leading/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_leading</span><span class="p" data-group-id="2087464247-1">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="2087464247-1">)</span><span class="w">
</span><span class="s">&quot;world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_leading</span><span class="p" data-group-id="2087464247-2">(</span><span class="s">&quot;hello hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="2087464247-2">)</span><span class="w">
</span><span class="s">&quot;world&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_leading</span><span class="p" data-group-id="2087464247-3">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ola &quot;</span><span class="p" data-group-id="2087464247-3">)</span><span class="w">
</span><span class="s">&quot;ola world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_leading</span><span class="p" data-group-id="2087464247-4">(</span><span class="s">&quot;hello hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ola &quot;</span><span class="p" data-group-id="2087464247-4">)</span><span class="w">
</span><span class="s">&quot;ola ola world&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="replace_prefix/3">
    <div class="detail-header">
    <a href="#replace_prefix/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">replace_prefix(string, match, replacement)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L937" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>replace_prefix(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Replaces prefix in <code class="inline">string</code> by <code class="inline">replacement</code> if it matches <code class="inline">match</code>.</p>
<p>Returns the string untouched if there is no match. If <code class="inline">match</code> is an empty
string (<code class="inline">&quot;&quot;</code>), <code class="inline">replacement</code> is just prepended to <code class="inline">string</code>.</p>
<h2 id="replace_prefix/3-examples" class="section-heading">
  <a href="#replace_prefix/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-1">(</span><span class="s">&quot;world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="2907574957-1">)</span><span class="w">
</span><span class="s">&quot;world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-2">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="2907574957-2">)</span><span class="w">
</span><span class="s">&quot;world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-3">(</span><span class="s">&quot;hello hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="2907574957-3">)</span><span class="w">
</span><span class="s">&quot;hello world&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-4">(</span><span class="s">&quot;world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ola &quot;</span><span class="p" data-group-id="2907574957-4">)</span><span class="w">
</span><span class="s">&quot;world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-5">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ola &quot;</span><span class="p" data-group-id="2907574957-5">)</span><span class="w">
</span><span class="s">&quot;ola world&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-6">(</span><span class="s">&quot;hello hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ola &quot;</span><span class="p" data-group-id="2907574957-6">)</span><span class="w">
</span><span class="s">&quot;ola hello world&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_prefix</span><span class="p" data-group-id="2907574957-7">(</span><span class="s">&quot;world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello &quot;</span><span class="p" data-group-id="2907574957-7">)</span><span class="w">
</span><span class="s">&quot;hello world&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="replace_suffix/3">
    <div class="detail-header">
    <a href="#replace_suffix/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">replace_suffix(string, match, replacement)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L977" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>replace_suffix(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Replaces suffix in <code class="inline">string</code> by <code class="inline">replacement</code> if it matches <code class="inline">match</code>.</p>
<p>Returns the string untouched if there is no match. If <code class="inline">match</code> is an empty
string (<code class="inline">&quot;&quot;</code>), <code class="inline">replacement</code> is just appended to <code class="inline">string</code>.</p>
<h2 id="replace_suffix/3-examples" class="section-heading">
  <a href="#replace_suffix/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-1">(</span><span class="s">&quot;hello&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="3384993374-1">)</span><span class="w">
</span><span class="s">&quot;hello&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-2">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="3384993374-2">)</span><span class="w">
</span><span class="s">&quot;hello&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-3">(</span><span class="s">&quot;hello world world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="3384993374-3">)</span><span class="w">
</span><span class="s">&quot;hello world&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-4">(</span><span class="s">&quot;hello&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; mundo&quot;</span><span class="p" data-group-id="3384993374-4">)</span><span class="w">
</span><span class="s">&quot;hello&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-5">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; mundo&quot;</span><span class="p" data-group-id="3384993374-5">)</span><span class="w">
</span><span class="s">&quot;hello mundo&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-6">(</span><span class="s">&quot;hello world world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; mundo&quot;</span><span class="p" data-group-id="3384993374-6">)</span><span class="w">
</span><span class="s">&quot;hello world mundo&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_suffix</span><span class="p" data-group-id="3384993374-7">(</span><span class="s">&quot;hello&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p" data-group-id="3384993374-7">)</span><span class="w">
</span><span class="s">&quot;hello world&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="replace_trailing/3">
    <div class="detail-header">
    <a href="#replace_trailing/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">replace_trailing(string, match, replacement)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L877" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>replace_trailing(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>() | <a href="typespecs.html#built-in-types">no_return</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Replaces all trailing occurrences of <code class="inline">match</code> by <code class="inline">replacement</code> in <code class="inline">string</code>.</p>
<p>Returns the string untouched if there are no occurrences.</p>
<p>If <code class="inline">match</code> is <code class="inline">&quot;&quot;</code>, this function raises an <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> exception: this
happens because this function replaces <strong>all</strong> the occurrences of <code class="inline">match</code> at
the end of <code class="inline">string</code>, and it’s impossible to replace “multiple” occurrences of
<code class="inline">&quot;&quot;</code>.</p>
<h2 id="replace_trailing/3-examples" class="section-heading">
  <a href="#replace_trailing/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_trailing</span><span class="p" data-group-id="8352683302-1">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="8352683302-1">)</span><span class="w">
</span><span class="s">&quot;hello&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_trailing</span><span class="p" data-group-id="8352683302-2">(</span><span class="s">&quot;hello world world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="8352683302-2">)</span><span class="w">
</span><span class="s">&quot;hello&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_trailing</span><span class="p" data-group-id="8352683302-3">(</span><span class="s">&quot;hello world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; mundo&quot;</span><span class="p" data-group-id="8352683302-3">)</span><span class="w">
</span><span class="s">&quot;hello mundo&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">replace_trailing</span><span class="p" data-group-id="8352683302-4">(</span><span class="s">&quot;hello world world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; world&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; mundo&quot;</span><span class="p" data-group-id="8352683302-4">)</span><span class="w">
</span><span class="s">&quot;hello mundo mundo&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="reverse/1">
    <div class="detail-header">
    <a href="#reverse/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">reverse(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1414" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>reverse(<a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Reverses the graphemes in given string.</p>
<h2 id="reverse/1-examples" class="section-heading">
  <a href="#reverse/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="9765479187-1">(</span><span class="s">&quot;abcd&quot;</span><span class="p" data-group-id="9765479187-1">)</span><span class="w">
</span><span class="s">&quot;dcba&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="9765479187-2">(</span><span class="s">&quot;hello world&quot;</span><span class="p" data-group-id="9765479187-2">)</span><span class="w">
</span><span class="s">&quot;dlrow olleh&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="9765479187-3">(</span><span class="s">&quot;hello ∂og&quot;</span><span class="p" data-group-id="9765479187-3">)</span><span class="w">
</span><span class="s">&quot;go∂ olleh&quot;</span></code></pre>
<p>Keep in mind reversing the same string twice does
not necessarily yield the original string:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="s">&quot;̀e&quot;</span><span class="w">
</span><span class="s">&quot;̀e&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="6789790976-1">(</span><span class="s">&quot;̀e&quot;</span><span class="p" data-group-id="6789790976-1">)</span><span class="w">
</span><span class="s">&quot;è&quot;</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="6789790976-2">(</span><span class="nc">String</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="6789790976-3">(</span><span class="s">&quot;̀e&quot;</span><span class="p" data-group-id="6789790976-3">)</span><span class="p" data-group-id="6789790976-2">)</span><span class="w">
</span><span class="s">&quot;è&quot;</span></code></pre>
<p>In the first example the accent is before the vowel, so
it is considered two graphemes. However, when you reverse
it once, you have the vowel followed by the accent, which
becomes one grapheme. Reversing it again will keep it as
one single grapheme.</p>
  </section>
</div>
<div class="detail" id="slice/2">
    <div class="detail-header">
    <a href="#slice/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">slice(string, range)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1895" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>slice(<a href="#t:t/0">t</a>(), <a href="Range.html#t:t/0">Range.t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a substring from the offset given by the start of the
range to the offset given by the end of the range.</p>
<p>If the start of the range is not a valid offset for the given
string or if the range is in reverse order, returns <code class="inline">&quot;&quot;</code>.</p>
<p>If the start or end of the range is negative, the whole string
is traversed first in order to convert the negative indices into
positive ones.</p>
<p>Remember this function works with Unicode graphemes and considers
the slices to represent grapheme offsets. If you want to split
on raw bytes, check <a href="Kernel.html#binary_part/3"><code class="inline">Kernel.binary_part/3</code></a> instead.</p>
<h2 id="slice/2-examples" class="section-heading">
  <a href="#slice/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p" data-group-id="0870945273-1">)</span><span class="w">
</span><span class="s">&quot;lix&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-2">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p" data-group-id="0870945273-2">)</span><span class="w">
</span><span class="s">&quot;lixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-3">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p" data-group-id="0870945273-3">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-4">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="o">-</span><span class="mi">1</span><span class="p" data-group-id="0870945273-4">)</span><span class="w">
</span><span class="s">&quot;ixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-5">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="o">.</span><span class="o">.</span><span class="o">-</span><span class="mi">1</span><span class="p" data-group-id="0870945273-5">)</span><span class="w">
</span><span class="s">&quot;ixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-6">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="mi">6</span><span class="p" data-group-id="0870945273-6">)</span><span class="w">
</span><span class="s">&quot;ixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-7">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="o">-</span><span class="mi">4</span><span class="p" data-group-id="0870945273-7">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-8">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">10</span><span class="o">.</span><span class="o">.</span><span class="o">-</span><span class="mi">7</span><span class="p" data-group-id="0870945273-8">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-9">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="o">.</span><span class="o">.</span><span class="mi">1500</span><span class="p" data-group-id="0870945273-9">)</span><span class="w">
</span><span class="s">&quot;a&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="0870945273-10">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">1500</span><span class="p" data-group-id="0870945273-10">)</span><span class="w">
</span><span class="s">&quot;&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="slice/3">
    <div class="detail-header">
    <a href="#slice/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">slice(string, start, len)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1814" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>slice(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">integer</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="#t:grapheme/0">grapheme</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a substring starting at the offset <code class="inline">start</code>, and of
length <code class="inline">len</code>.</p>
<p>If the offset is greater than string length, then it returns <code class="inline">&quot;&quot;</code>.</p>
<p>Remember this function works with Unicode graphemes and considers
the slices to represent grapheme offsets. If you want to split
on raw bytes, check <a href="Kernel.html#binary_part/3"><code class="inline">Kernel.binary_part/3</code></a> instead.</p>
<h2 id="slice/3-examples" class="section-heading">
  <a href="#slice/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8188590075-1">)</span><span class="w">
</span><span class="s">&quot;lix&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-2">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="8188590075-2">)</span><span class="w">
</span><span class="s">&quot;lixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-3">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8188590075-3">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-4">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p" data-group-id="8188590075-4">)</span><span class="w">
</span><span class="s">&quot;ixir&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-5">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8188590075-5">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-6">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1500</span><span class="p" data-group-id="8188590075-6">)</span><span class="w">
</span><span class="s">&quot;a&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-7">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1500</span><span class="p" data-group-id="8188590075-7">)</span><span class="w">
</span><span class="s">&quot;&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">slice</span><span class="p" data-group-id="8188590075-8">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1500</span><span class="p" data-group-id="8188590075-8">)</span><span class="w">
</span><span class="s">&quot;&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="split/1">
    <div class="detail-header">
    <a href="#split/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">split(binary)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L307" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>split(<a href="#t:t/0">t</a>()) :: [<a href="#t:t/0">t</a>()]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Divides a string into substrings at each Unicode whitespace
occurrence with leading and trailing whitespace ignored. Groups
of whitespace are treated as a single occurrence. Divisions do
not occur on non-breaking whitespace.</p>
<h2 id="split/1-examples" class="section-heading">
  <a href="#split/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="0149884952-1">(</span><span class="s">&quot;foo bar&quot;</span><span class="p" data-group-id="0149884952-1">)</span><span class="w">
</span><span class="p" data-group-id="0149884952-2">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p" data-group-id="0149884952-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="0149884952-3">(</span><span class="s">&quot;foo&quot;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="p" data-group-id="0149884952-4">&lt;&lt;</span><span class="mi">194</span><span class="p">,</span><span class="w"> </span><span class="mi">133</span><span class="p" data-group-id="0149884952-4">&gt;&gt;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p" data-group-id="0149884952-3">)</span><span class="w">
</span><span class="p" data-group-id="0149884952-5">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p" data-group-id="0149884952-5">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="0149884952-6">(</span><span class="s">&quot; foo   bar &quot;</span><span class="p" data-group-id="0149884952-6">)</span><span class="w">
</span><span class="p" data-group-id="0149884952-7">[</span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p" data-group-id="0149884952-7">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="0149884952-8">(</span><span class="s">&quot;no</span><span class="se">\u00a0</span><span class="s">break&quot;</span><span class="p" data-group-id="0149884952-8">)</span><span class="w">
</span><span class="p" data-group-id="0149884952-9">[</span><span class="s">&quot;no</span><span class="se">\u00a0</span><span class="s">break&quot;</span><span class="p" data-group-id="0149884952-9">]</span></code></pre>
  </section>
</div>
<div class="detail" id="split/3">
  
    <span id="split/2"></span>
  <div class="detail-header">
    <a href="#split/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">split(string, pattern, options \\ [])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L427" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>split(<a href="#t:t/0">t</a>(), <a href="#t:pattern/0">pattern</a>() | <a href="Regex.html#t:t/0">Regex.t</a>(), <a href="typespecs.html#built-in-types">keyword</a>()) :: [<a href="#t:t/0">t</a>()]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Divides a string into substrings based on a pattern.</p>
<p>Returns a list of these substrings. The pattern can
be a string, a list of strings, a regular expression,
or a compiled pattern.</p>
<p>The string is split into as many parts as possible by
default, but can be controlled via the <code class="inline">:parts</code> option.</p>
<p>Empty strings are only removed from the result if the
<code class="inline">:trim</code> option is set to <code class="inline">true</code>.</p>
<p>When the pattern used is a regular expression, the string is
split using <a href="Regex.html#split/3"><code class="inline">Regex.split/3</code></a>.</p>
<h2 id="split/3-options" class="section-heading">
  <a href="#split/3-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Options
</h2>

<ul>
<li><p><code class="inline">:parts</code> (positive integer or <code class="inline">:infinity</code>) - the string
is split into at most as many parts as this option specifies.
If <code class="inline">:infinity</code>, the string will be split into all possible
parts. Defaults to <code class="inline">:infinity</code>.</p>
</li>
<li><p><code class="inline">:trim</code> (boolean) - if <code class="inline">true</code>, empty strings are removed from
the resulting list.</p>
</li>
</ul>
<p>This function also accepts all options accepted by <a href="Regex.html#split/3"><code class="inline">Regex.split/3</code></a>
if <code class="inline">pattern</code> is a regular expression.</p>
<h2 id="split/3-examples" class="section-heading">
  <a href="#split/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<p>Splitting with a string pattern:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="1444495175-1">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="1444495175-1">)</span><span class="w">
</span><span class="p" data-group-id="1444495175-2">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="1444495175-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="1444495175-3">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">parts</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1444495175-3">)</span><span class="w">
</span><span class="p" data-group-id="1444495175-4">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b,c&quot;</span><span class="p" data-group-id="1444495175-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="1444495175-5">(</span><span class="s">&quot; a b c &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">trim</span><span class="p">:</span><span class="w"> </span><span class="no">true</span><span class="p" data-group-id="1444495175-5">)</span><span class="w">
</span><span class="p" data-group-id="1444495175-6">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="1444495175-6">]</span></code></pre>
<p>A list of patterns:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="8685755652-1">(</span><span class="s">&quot;1,2 3,4&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8685755652-2">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="8685755652-2">]</span><span class="p" data-group-id="8685755652-1">)</span><span class="w">
</span><span class="p" data-group-id="8685755652-3">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;2&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;3&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;4&quot;</span><span class="p" data-group-id="8685755652-3">]</span></code></pre>
<p>A regular expression:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="3998565608-1">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r{,}</span><span class="p" data-group-id="3998565608-1">)</span><span class="w">
</span><span class="p" data-group-id="3998565608-2">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="3998565608-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="3998565608-3">(</span><span class="s">&quot;a,b,c&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r{,}</span><span class="p">,</span><span class="w"> </span><span class="ss">parts</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3998565608-3">)</span><span class="w">
</span><span class="p" data-group-id="3998565608-4">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b,c&quot;</span><span class="p" data-group-id="3998565608-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="3998565608-5">(</span><span class="s">&quot; a b c &quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r{</span><span class="se">\s</span><span class="sr">}</span><span class="p">,</span><span class="w"> </span><span class="ss">trim</span><span class="p">:</span><span class="w"> </span><span class="no">true</span><span class="p" data-group-id="3998565608-5">)</span><span class="w">
</span><span class="p" data-group-id="3998565608-6">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="3998565608-6">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="3998565608-7">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="sr">~r{b}</span><span class="p">,</span><span class="w"> </span><span class="ss">include_captures</span><span class="p">:</span><span class="w"> </span><span class="no">true</span><span class="p" data-group-id="3998565608-7">)</span><span class="w">
</span><span class="p" data-group-id="3998565608-8">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="3998565608-8">]</span></code></pre>
<p>A compiled pattern:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="0543336879-1">(</span><span class="p" data-group-id="0543336879-2">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="0543336879-2">]</span><span class="p" data-group-id="0543336879-1">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="0543336879-3">(</span><span class="s">&quot;1,2 3,4&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p" data-group-id="0543336879-3">)</span><span class="w">
</span><span class="p" data-group-id="0543336879-4">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;2&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;3&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;4&quot;</span><span class="p" data-group-id="0543336879-4">]</span></code></pre>
<p>Splitting on empty string returns graphemes:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5873050194-1">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="5873050194-1">)</span><span class="w">
</span><span class="p" data-group-id="5873050194-2">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="5873050194-2">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5873050194-3">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">trim</span><span class="p">:</span><span class="w"> </span><span class="no">true</span><span class="p" data-group-id="5873050194-3">)</span><span class="w">
</span><span class="p" data-group-id="5873050194-4">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p" data-group-id="5873050194-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5873050194-5">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">parts</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="5873050194-5">)</span><span class="w">
</span><span class="p" data-group-id="5873050194-6">[</span><span class="s">&quot;abc&quot;</span><span class="p" data-group-id="5873050194-6">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5873050194-7">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">parts</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="5873050194-7">)</span><span class="w">
</span><span class="p" data-group-id="5873050194-8">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bc&quot;</span><span class="p" data-group-id="5873050194-8">]</span></code></pre>
<p>Note this function can split within or across grapheme boundaries.
For example, take the grapheme “é” which is made of the characters
“e” and the acute accent. The following returns <code class="inline">true</code>:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="5118069104-1">(</span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="5118069104-2">(</span><span class="s">&quot;é&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfd</span><span class="p" data-group-id="5118069104-2">)</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;e&quot;</span><span class="p" data-group-id="5118069104-1">)</span><span class="w">
</span><span class="p" data-group-id="5118069104-3">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;́&quot;</span><span class="p" data-group-id="5118069104-3">]</span></code></pre>
<p>However, if “é” is represented by the single character “e with acute”
accent, then it will return <code class="inline">false</code>:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split</span><span class="p" data-group-id="9027810718-1">(</span><span class="nc">String</span><span class="o">.</span><span class="n">normalize</span><span class="p" data-group-id="9027810718-2">(</span><span class="s">&quot;é&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:nfc</span><span class="p" data-group-id="9027810718-2">)</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;e&quot;</span><span class="p" data-group-id="9027810718-1">)</span><span class="w">
</span><span class="p" data-group-id="9027810718-3">[</span><span class="s">&quot;é&quot;</span><span class="p" data-group-id="9027810718-3">]</span></code></pre>
  </section>
</div>
<div class="detail" id="split_at/2">
    <div class="detail-header">
    <a href="#split_at/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">split_at(string, position)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L564" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>split_at(<a href="#t:t/0">t</a>(), <a href="typespecs.html#basic-types">integer</a>()) :: {<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Splits a string into two at the specified offset. When the offset given is
negative, location is counted from the end of the string.</p>
<p>The offset is capped to the length of the string. Returns a tuple with
two elements.</p>
<p>Note: keep in mind this function splits on graphemes and for such it
has to linearly traverse the string. If you want to split a string or
a binary based on the number of bytes, use <a href="Kernel.html#binary_part/3"><code class="inline">Kernel.binary_part/3</code></a>
instead.</p>
<h2 id="split_at/2-examples" class="section-heading">
  <a href="#split_at/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split_at</span><span class="p" data-group-id="6151797289-1">(</span><span class="s">&quot;sweetelixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="6151797289-1">)</span><span class="w">
</span><span class="p" data-group-id="6151797289-2">{</span><span class="s">&quot;sweet&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="6151797289-2">}</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split_at</span><span class="p" data-group-id="6151797289-3">(</span><span class="s">&quot;sweetelixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">6</span><span class="p" data-group-id="6151797289-3">)</span><span class="w">
</span><span class="p" data-group-id="6151797289-4">{</span><span class="s">&quot;sweet&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="6151797289-4">}</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split_at</span><span class="p" data-group-id="6151797289-5">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="6151797289-5">)</span><span class="w">
</span><span class="p" data-group-id="6151797289-6">{</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;abc&quot;</span><span class="p" data-group-id="6151797289-6">}</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split_at</span><span class="p" data-group-id="6151797289-7">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1000</span><span class="p" data-group-id="6151797289-7">)</span><span class="w">
</span><span class="p" data-group-id="6151797289-8">{</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="6151797289-8">}</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">split_at</span><span class="p" data-group-id="6151797289-9">(</span><span class="s">&quot;abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1000</span><span class="p" data-group-id="6151797289-9">)</span><span class="w">
</span><span class="p" data-group-id="6151797289-10">{</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;abc&quot;</span><span class="p" data-group-id="6151797289-10">}</span></code></pre>
  </section>
</div>
<div class="detail" id="splitter/3">
  
    <span id="splitter/2"></span>
  <div class="detail-header">
    <a href="#splitter/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">splitter(string, pattern, options \\ [])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L501" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>splitter(<a href="#t:t/0">t</a>(), <a href="#t:pattern/0">pattern</a>(), <a href="typespecs.html#built-in-types">keyword</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns an enumerable that splits a string on demand.</p>
<p>This is in contrast to <a href="#split/3"><code class="inline">split/3</code></a> which splits the
entire string upfront.</p>
<p>Note splitter does not support regular expressions
(as it is often more efficient to have the regular
expressions traverse the string at once than in
multiple passes).</p>
<h2 id="splitter/3-options" class="section-heading">
  <a href="#splitter/3-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Options
</h2>

<ul>
<li>:trim - when <code class="inline">true</code>, does not emit empty patterns
</li>
</ul>
<h2 id="splitter/3-examples" class="section-heading">
  <a href="#splitter/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">splitter</span><span class="p" data-group-id="1788692959-1">(</span><span class="s">&quot;1,2 3,4 5,6 7,8,...,99999&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1788692959-2">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="1788692959-2">]</span><span class="p" data-group-id="1788692959-1">)</span><span class="w"> </span><span class="o">|&gt;</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="1788692959-3">(</span><span class="mi">4</span><span class="p" data-group-id="1788692959-3">)</span><span class="w">
</span><span class="p" data-group-id="1788692959-4">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;2&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;3&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;4&quot;</span><span class="p" data-group-id="1788692959-4">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">splitter</span><span class="p" data-group-id="1788692959-5">(</span><span class="s">&quot;abcd&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="1788692959-5">)</span><span class="w"> </span><span class="o">|&gt;</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="1788692959-6">(</span><span class="mi">10</span><span class="p" data-group-id="1788692959-6">)</span><span class="w">
</span><span class="p" data-group-id="1788692959-7">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;d&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="1788692959-7">]</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">splitter</span><span class="p" data-group-id="1788692959-8">(</span><span class="s">&quot;abcd&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">trim</span><span class="p">:</span><span class="w"> </span><span class="no">true</span><span class="p" data-group-id="1788692959-8">)</span><span class="w"> </span><span class="o">|&gt;</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="1788692959-9">(</span><span class="mi">10</span><span class="p" data-group-id="1788692959-9">)</span><span class="w">
</span><span class="p" data-group-id="1788692959-10">[</span><span class="s">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;c&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;d&quot;</span><span class="p" data-group-id="1788692959-10">]</span></code></pre>
<p>A compiled pattern can also be given:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="8803671598-1">(</span><span class="p" data-group-id="8803671598-2">[</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;,&quot;</span><span class="p" data-group-id="8803671598-2">]</span><span class="p" data-group-id="8803671598-1">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">splitter</span><span class="p" data-group-id="8803671598-3">(</span><span class="s">&quot;1,2 3,4 5,6 7,8,...,99999&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p" data-group-id="8803671598-3">)</span><span class="w"> </span><span class="o">|&gt;</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="8803671598-4">(</span><span class="mi">4</span><span class="p" data-group-id="8803671598-4">)</span><span class="w">
</span><span class="p" data-group-id="8803671598-5">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;2&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;3&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;4&quot;</span><span class="p" data-group-id="8803671598-5">]</span></code></pre>
  </section>
</div>
<div class="detail" id="starts_with?/2">
    <div class="detail-header">
    <a href="#starts_with?/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">starts_with?(string, prefix)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1962" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>starts_with?(<a href="#t:t/0">t</a>(), <a href="#t:pattern/0">pattern</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns <code class="inline">true</code> if <code class="inline">string</code> starts with any of the prefixes given.</p>
<p><code class="inline">prefix</code> can be either a string, a list of strings, or a compiled
pattern.</p>
<h2 id="starts_with?/2-examples" class="section-heading">
  <a href="#starts_with?/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="8760861305-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;eli&quot;</span><span class="p" data-group-id="8760861305-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="8760861305-2">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8760861305-3">[</span><span class="s">&quot;erlang&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="8760861305-3">]</span><span class="p" data-group-id="8760861305-2">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="8760861305-4">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8760861305-5">[</span><span class="s">&quot;erlang&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;ruby&quot;</span><span class="p" data-group-id="8760861305-5">]</span><span class="p" data-group-id="8760861305-4">)</span><span class="w">
</span><span class="no">false</span></code></pre>
<p>A compiled pattern can also be given:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="n">pattern</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:binary</span><span class="o">.</span><span class="n">compile_pattern</span><span class="p" data-group-id="5100698786-1">(</span><span class="p" data-group-id="5100698786-2">[</span><span class="s">&quot;erlang&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;elixir&quot;</span><span class="p" data-group-id="5100698786-2">]</span><span class="p" data-group-id="5100698786-1">)</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="5100698786-3">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">pattern</span><span class="p" data-group-id="5100698786-3">)</span><span class="w">
</span><span class="no">true</span></code></pre>
<p>An empty string will always match:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="8332105259-1">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p" data-group-id="8332105259-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">starts_with?</span><span class="p" data-group-id="8332105259-2">(</span><span class="s">&quot;elixir&quot;</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8332105259-3">[</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;other&quot;</span><span class="p" data-group-id="8332105259-3">]</span><span class="p" data-group-id="8332105259-2">)</span><span class="w">
</span><span class="no">true</span></code></pre>
  </section>
</div>
<div class="detail" id="to_atom/1">
    <div class="detail-header">
    <a href="#to_atom/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_atom(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2145" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_atom(<a href="String.html#t:t/0">String.t</a>()) :: <a href="typespecs.html#basic-types">atom</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts a string to an atom.</p>
<p>Warning: this function creates atoms dynamically and atoms are
not garbage-collected. Therefore, <code class="inline">string</code> should not be an
untrusted value, such as input received from a socket or during
a web request. Consider using <a href="#to_existing_atom/1"><code class="inline">to_existing_atom/1</code></a> instead.</p>
<p>By default, the maximum number of atoms is <code class="inline">1_048_576</code>. This limit
can be raised or lowered using the VM option <code class="inline">+t</code>.</p>
<p>The maximum atom size is of 255 characters. Prior to Erlang/OTP 20,
only latin1 characters are allowed.</p>
<p>Inlined by the compiler.</p>
<h2 id="to_atom/1-examples" class="section-heading">
  <a href="#to_atom/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_atom</span><span class="p" data-group-id="1426655790-1">(</span><span class="s">&quot;my_atom&quot;</span><span class="p" data-group-id="1426655790-1">)</span><span class="w">
</span><span class="ss">:my_atom</span></code></pre>
  </section>
</div>
<div class="detail" id="to_charlist/1">
    <div class="detail-header">
    <a href="#to_charlist/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_charlist(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2109" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_charlist(<a href="#t:t/0">t</a>()) :: <a href="typespecs.html#built-in-types">charlist</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts a string into a charlist.</p>
<p>Specifically, this functions takes a UTF-8 encoded binary and returns a list of its integer
codepoints. It is similar to <a href="#codepoints/1"><code class="inline">codepoints/1</code></a> except that the latter returns a list of codepoints as
strings.</p>
<p>In case you need to work with bytes, take a look at the
<a href="http://www.erlang.org/doc/man/binary.html"><code class="inline">:binary</code> module</a>.</p>
<h2 id="to_charlist/1-examples" class="section-heading">
  <a href="#to_charlist/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_charlist</span><span class="p" data-group-id="3760009765-1">(</span><span class="s">&quot;æß&quot;</span><span class="p" data-group-id="3760009765-1">)</span><span class="w">
</span><span class="sc">&#39;æß&#39;</span></code></pre>
  </section>
</div>
<div class="detail" id="to_existing_atom/1">
    <div class="detail-header">
    <a href="#to_existing_atom/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_existing_atom(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2168" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_existing_atom(<a href="String.html#t:t/0">String.t</a>()) :: <a href="typespecs.html#basic-types">atom</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts a string to an existing atom.</p>
<p>The maximum atom size is of 255 characters. Prior to Erlang/OTP 20,
only latin1 characters are allowed.</p>
<p>Inlined by the compiler.</p>
<h2 id="to_existing_atom/1-examples" class="section-heading">
  <a href="#to_existing_atom/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="bp">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ss">:my_atom</span><span class="w">
</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_existing_atom</span><span class="p" data-group-id="0145914437-1">(</span><span class="s">&quot;my_atom&quot;</span><span class="p" data-group-id="0145914437-1">)</span><span class="w">
</span><span class="ss">:my_atom</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_existing_atom</span><span class="p" data-group-id="0145914437-2">(</span><span class="s">&quot;this_atom_will_never_exist&quot;</span><span class="p" data-group-id="0145914437-2">)</span><span class="w">
</span><span class="gt">** (ArgumentError) argument error</span></code></pre>
  </section>
</div>
<div class="detail" id="to_float/1">
    <div class="detail-header">
    <a href="#to_float/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_float(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2226" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_float(<a href="String.html#t:t/0">String.t</a>()) :: <a href="typespecs.html#basic-types">float</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a float whose text representation is <code class="inline">string</code>.</p>
<p><code class="inline">string</code> must be the string representation of a float including a decimal point.
In order to parse a string without decimal point as a float then <a href="Float.html#parse/1"><code class="inline">Float.parse/1</code></a>
should be used. Otherwise, an <a href="ArgumentError.html"><code class="inline">ArgumentError</code></a> will be raised.</p>
<p>Inlined by the compiler.</p>
<h2 id="to_float/1-examples" class="section-heading">
  <a href="#to_float/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_float</span><span class="p" data-group-id="6748780331-1">(</span><span class="s">&quot;2.2017764e+0&quot;</span><span class="p" data-group-id="6748780331-1">)</span><span class="w">
</span><span class="mf">2.2017764</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_float</span><span class="p" data-group-id="6748780331-2">(</span><span class="s">&quot;3.0&quot;</span><span class="p" data-group-id="6748780331-2">)</span><span class="w">
</span><span class="mf">3.0</span><span class="w">

</span><span class="nc">String</span><span class="o">.</span><span class="n">to_float</span><span class="p" data-group-id="6748780331-3">(</span><span class="s">&quot;3&quot;</span><span class="p" data-group-id="6748780331-3">)</span><span class="w">
</span><span class="c1">#=&gt; ** (ArgumentError) argument error</span></code></pre>
  </section>
</div>
<div class="detail" id="to_integer/1">
    <div class="detail-header">
    <a href="#to_integer/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_integer(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2184" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_integer(<a href="String.html#t:t/0">String.t</a>()) :: <a href="typespecs.html#basic-types">integer</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns an integer whose text representation is <code class="inline">string</code>.</p>
<p>Inlined by the compiler.</p>
<h2 id="to_integer/1-examples" class="section-heading">
  <a href="#to_integer/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_integer</span><span class="p" data-group-id="1914328107-1">(</span><span class="s">&quot;123&quot;</span><span class="p" data-group-id="1914328107-1">)</span><span class="w">
</span><span class="mi">123</span></code></pre>
  </section>
</div>
<div class="detail" id="to_integer/2">
    <div class="detail-header">
    <a href="#to_integer/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">to_integer(string, base)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L2200" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>to_integer(<a href="String.html#t:t/0">String.t</a>(), 2..36) :: <a href="typespecs.html#basic-types">integer</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns an integer whose text representation is <code class="inline">string</code> in base <code class="inline">base</code>.</p>
<p>Inlined by the compiler.</p>
<h2 id="to_integer/2-examples" class="section-heading">
  <a href="#to_integer/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">to_integer</span><span class="p" data-group-id="6814873596-1">(</span><span class="s">&quot;3FF&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">16</span><span class="p" data-group-id="6814873596-1">)</span><span class="w">
</span><span class="mi">1023</span></code></pre>
  </section>
</div>
<div class="detail" id="trim/1">
    <div class="detail-header">
    <a href="#trim/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1096" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim(<a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all leading and trailing Unicode whitespaces
have been removed.</p>
<h2 id="trim/1-examples" class="section-heading">
  <a href="#trim/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim</span><span class="p" data-group-id="5182269501-1">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">  abc</span><span class="se">\n</span><span class="s">  &quot;</span><span class="p" data-group-id="5182269501-1">)</span><span class="w">
</span><span class="s">&quot;abc&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="trim/2">
    <div class="detail-header">
    <a href="#trim/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim(string, to_trim)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1113" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all leading and trailing <code class="inline">to_trim</code>s have been
removed.</p>
<h2 id="trim/2-examples" class="section-heading">
  <a href="#trim/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim</span><span class="p" data-group-id="8177458170-1">(</span><span class="s">&quot;a  abc  a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p" data-group-id="8177458170-1">)</span><span class="w">
</span><span class="s">&quot;  abc  &quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="trim_leading/1">
    <div class="detail-header">
    <a href="#trim_leading/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim_leading(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1036" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim_leading(<a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all leading Unicode whitespaces
have been removed.</p>
<h2 id="trim_leading/1-examples" class="section-heading">
  <a href="#trim_leading/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_leading</span><span class="p" data-group-id="5027866099-1">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">  abc   &quot;</span><span class="p" data-group-id="5027866099-1">)</span><span class="w">
</span><span class="s">&quot;abc   &quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="trim_leading/2">
    <div class="detail-header">
    <a href="#trim_leading/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim_leading(string, to_trim)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1051" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim_leading(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all leading <code class="inline">to_trim</code>s have been removed.</p>
<h2 id="trim_leading/2-examples" class="section-heading">
  <a href="#trim_leading/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_leading</span><span class="p" data-group-id="6498909671-1">(</span><span class="s">&quot;__ abc _&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;_&quot;</span><span class="p" data-group-id="6498909671-1">)</span><span class="w">
</span><span class="s">&quot; abc _&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_leading</span><span class="p" data-group-id="6498909671-2">(</span><span class="s">&quot;1 abc&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;11&quot;</span><span class="p" data-group-id="6498909671-2">)</span><span class="w">
</span><span class="s">&quot;1 abc&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="trim_trailing/1">
    <div class="detail-header">
    <a href="#trim_trailing/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim_trailing(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1066" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim_trailing(<a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all trailing Unicode whitespaces
has been removed.</p>
<h2 id="trim_trailing/1-examples" class="section-heading">
  <a href="#trim_trailing/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_trailing</span><span class="p" data-group-id="3672491698-1">(</span><span class="s">&quot;   abc</span><span class="se">\n</span><span class="s">  &quot;</span><span class="p" data-group-id="3672491698-1">)</span><span class="w">
</span><span class="s">&quot;   abc&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="trim_trailing/2">
    <div class="detail-header">
    <a href="#trim_trailing/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">trim_trailing(string, to_trim)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1081" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>trim_trailing(<a href="#t:t/0">t</a>(), <a href="#t:t/0">t</a>()) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a string where all trailing <code class="inline">to_trim</code>s have been removed.</p>
<h2 id="trim_trailing/2-examples" class="section-heading">
  <a href="#trim_trailing/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_trailing</span><span class="p" data-group-id="2343529299-1">(</span><span class="s">&quot;_ abc __&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;_&quot;</span><span class="p" data-group-id="2343529299-1">)</span><span class="w">
</span><span class="s">&quot;_ abc &quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">trim_trailing</span><span class="p" data-group-id="2343529299-2">(</span><span class="s">&quot;abc 1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;11&quot;</span><span class="p" data-group-id="2343529299-2">)</span><span class="w">
</span><span class="s">&quot;abc 1&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="upcase/2">
  
    <span id="upcase/1"></span>
  <div class="detail-header">
    <a href="#upcase/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">upcase(string, mode \\ :default)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L680" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>upcase(<a href="#t:t/0">t</a>(), :default | :ascii | :greek) :: <a href="#t:t/0">t</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Converts all characters in the given string to uppercase according to <code class="inline">mode</code>.</p>
<p><code class="inline">mode</code> may be <code class="inline">:default</code>, <code class="inline">:ascii</code> or <code class="inline">:greek</code>. The <code class="inline">:default</code> mode considers
all non-conditional transformations outlined in the Unicode standard. <code class="inline">:ascii</code>
uppercases only the letters a to z. <code class="inline">:greek</code> includes the context sensitive
mappings found in Greek.</p>
<h2 id="upcase/2-examples" class="section-heading">
  <a href="#upcase/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">upcase</span><span class="p" data-group-id="2023843316-1">(</span><span class="s">&quot;abcd&quot;</span><span class="p" data-group-id="2023843316-1">)</span><span class="w">
</span><span class="s">&quot;ABCD&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">upcase</span><span class="p" data-group-id="2023843316-2">(</span><span class="s">&quot;ab 123 xpto&quot;</span><span class="p" data-group-id="2023843316-2">)</span><span class="w">
</span><span class="s">&quot;AB 123 XPTO&quot;</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">upcase</span><span class="p" data-group-id="2023843316-3">(</span><span class="s">&quot;olá&quot;</span><span class="p" data-group-id="2023843316-3">)</span><span class="w">
</span><span class="s">&quot;OLÁ&quot;</span></code></pre>
<p>The <code class="inline">:ascii</code> mode ignores Unicode characters and provides a more
performant implementation when you know the string contains only
ASCII characters:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">upcase</span><span class="p" data-group-id="1032575256-1">(</span><span class="s">&quot;olá&quot;</span><span class="p">,</span><span class="w"> </span><span class="ss">:ascii</span><span class="p" data-group-id="1032575256-1">)</span><span class="w">
</span><span class="s">&quot;OLá&quot;</span></code></pre>
  </section>
</div>
<div class="detail" id="valid?/1">
    <div class="detail-header">
    <a href="#valid?/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">valid?(string)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/string.ex#L1522" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>valid?(<a href="#t:t/0">t</a>()) :: <a href="typespecs.html#built-in-types">boolean</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Checks whether <code class="inline">string</code> contains only valid characters.</p>
<h2 id="valid?/1-examples" class="section-heading">
  <a href="#valid?/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">valid?</span><span class="p" data-group-id="2980363693-1">(</span><span class="s">&quot;a&quot;</span><span class="p" data-group-id="2980363693-1">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">valid?</span><span class="p" data-group-id="2980363693-2">(</span><span class="s">&quot;ø&quot;</span><span class="p" data-group-id="2980363693-2">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">valid?</span><span class="p" data-group-id="2980363693-3">(</span><span class="p" data-group-id="2980363693-4">&lt;&lt;</span><span class="mh">0xFFFF</span><span class="o">::</span><span class="mi">16</span><span class="p" data-group-id="2980363693-4">&gt;&gt;</span><span class="p" data-group-id="2980363693-3">)</span><span class="w">
</span><span class="no">false</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">valid?</span><span class="p" data-group-id="2980363693-5">(</span><span class="p" data-group-id="2980363693-6">&lt;&lt;</span><span class="mh">0xEF</span><span class="p">,</span><span class="w"> </span><span class="mh">0xB7</span><span class="p">,</span><span class="w"> </span><span class="mh">0x90</span><span class="p" data-group-id="2980363693-6">&gt;&gt;</span><span class="p" data-group-id="2980363693-5">)</span><span class="w">
</span><span class="no">true</span><span class="w">

</span><span class="gp unselectable">iex&gt; </span><span class="nc">String</span><span class="o">.</span><span class="n">valid?</span><span class="p" data-group-id="2980363693-7">(</span><span class="s">&quot;asd&quot;</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="p" data-group-id="2980363693-8">&lt;&lt;</span><span class="mh">0xFFFF</span><span class="o">::</span><span class="mi">16</span><span class="p" data-group-id="2980363693-8">&gt;&gt;</span><span class="p" data-group-id="2980363693-7">)</span><span class="w">
</span><span class="no">false</span></code></pre>
  </section>
</div>
        </section>

          <footer class="footer">
        <p>
          <span class="line">
            Built using
            <a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.19.1),
          </span>
          <span class="line">
            designed by
            <a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
            </span>
        </p>
      </footer>
    </div>
  </div>
</section>
</div>
  <script src="dist/app-a0c90688fa.js"></script>
  
  </body>
</html>