5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 20

Stringモジュールで遊んでみたシリーズ10 -String.trim_leading ~ String.valid? の紹介

Last updated at Posted at 2024-12-15

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はStringモジュールについて学んだことをまとめます。

目次

1.Stringモジュールで遊んでみたシリーズ① -String.at ~ String.chunk の紹介
2.Stringモジュールで遊んでみたシリーズ② -String.codepoints ~ String.ends_with? の紹介
3.Stringモジュールで遊んでみたシリーズ③ -String.equivalent? ~ String.last の紹介
4.Stringモジュールで遊んでみたシリーズ④ -String.length ~ String.next_grapheme の紹介
5.Stringモジュールで遊んでみたシリーズ⑤ -String.next_grapheme_size ~ String.printable? の紹介
6.Stringモジュールで遊んでみたシリーズ⑥ -String.replace ~ String.replace_suffix の紹介
7.Stringモジュールで遊んでみたシリーズ⑦ -String.replace_trailing ~ String.split の紹介
8.Stringモジュールで遊んでみたシリーズ⑧ -String.split_at ~ String.to_charlist の紹介
9.Stringモジュールで遊んでみたシリーズ⑨ -String.to_existing_atom ~ String.trim の紹介
10.Stringモジュールで遊んでみたシリーズ10 -String.trim_leading ~ String.valid? の紹介(本記事)

目的

Stringモジュールに含まれる関数を触って機能を理解したい

実行環境

Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0

String.trim_leadingとは(trim_leading/1)

String.trim_leading(string)stringの先頭にあるUnicode空白にあたる文字を全て削除した文字列を返します。

下記は以下の空白文字を含んでいる

  • \n LF(Line Feed)のエスケープシーケンス
  • \r CR(Carriage return)エスケープシーケンス
  • 半角スペース

先頭の\nのみが削除される

iex
String.trim_leading("\n abc\r  ")
"abc\r  "

String.trim_leadingとは(trim_leading/2)

String.trim(string, to_trim)stringの先頭にあるto_trimを全て削除した文字列を返します。

先頭の"a"のみが削除されるため" abc a"だけが残る

iex
String.trim_leading("a  abc  a", "a")
"  abc  a"

String.trim_trailingとは(trim_trailing/1)

String.trim_trailing(string)stringの末尾にあるUnicode空白にあたる文字を全て削除した文字列を返します。

下記は以下の空白文字を含んでいる

  • \n LF(Line Feed)のエスケープシーケンス
  • \r CR(Carriage return)エスケープシーケンス
  • 半角スペース

末尾の\r のみが削除される

iex
String.trim_leading("\n abc\r  ")
"\n abc"

String.trim_trailingとは(trim_trailing/2)

String.trim(string, to_trim)stringの末尾にあるto_trimを全て削除した文字列を返します。

末尾の"a"のみが削除されるため"a abc "だけが残る

iex
  String.trim_trailing("a  abc  a", "a")
"a  abc  "

String.upcaseとは

String.upcase(string, mode \\ :default)stringの全ての文字をmodeに従って大文字に変換します。

iex
String.upcase("abcd")
"ABCD"

類似の関数との比較

全て小文字に変換したい場合 → String.downcase

先頭の1文字だけ大文字に変換したい場合 → String.capitalize

String.valid?とは

String.valid?(string, algorithm \\ :default)stringが有効な文字列か否かをチェックします。

iex
String.valid?("a")
true

類似の関数との比較

無効な文字列を置換したい場合 → String.replace_invalid

補足:無効な文字列とは

下記の<<0xFF::8>>はbit長を明示したバイナリの書き方です1

つまり、0xFF(←16進数表記。10進数表記で255。2進数表記で11111111)を8ビット長(=1バイト長)のバイナリで示すという意味です。

Elixirの文字列はUTF-8エンコードされたバイナリです。

しかし0xFFはUTF-8で示せる範囲に含まれていません。23

したがって、<<0xFF::8>>は無効な文字列であり、<<0xFF::8>>を文字列結合した"asd" <> <<0xFF::8>>も無効な文字列です。

iex
String.valid?("asd" <> <<0xFF::8>>) 
false

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:4
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。5

  1. https://qiita.com/kikuyuta/items/e200a6208013f38333de#%E3%83%93%E3%83%83%E3%83%88%E5%88%97-bitstring

  2. https://qiita.com/nekotadon/items/5d0f0fc7c58d088eec99#utf-8%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

  3. https://ja.wikipedia.org/wiki/UTF-8

  4. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  5. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?