質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

2回答

5104閲覧

Rustでのマルチバイト文字での部分文字列の取得方法

mosmos_21

総合スコア46

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2018/05/15 04:07

Rustで部分文字列を取得する際の方法がわかりません。
半角文字であれば以下のような書き方

rust

1let tail: &str = &text[1..];

をすることで1文字目以降を取得することが出来ますが、
これだとバイト単位なのでマルチバイト文字を扱うことが出来ません。

どのように書けばいいのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

charsでマルチバイト文字のイテレータを取り出すことが出来ます。あとはskiptakeで部分文字列が取得できるかと思います。

スライスのようなインデックスアクセスはできないのでどうしてもメソッドによるアクセスになります。

rust

1fn main() { 2 let s = "あいうえお"; 3 let sub = s.chars().skip(1).take(2).collect::<String>(); 4 assert_eq!(sub, "いう"); 5}

playground

投稿2018/05/15 04:20

blackenedgold

総合スコア468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Stringにコピーせずに元のstrの参照のまま欲しい場合はchar_indicesが使えます

rust

1fn main() { 2 let s = "あいうえお"; 3 let mut c = s.char_indices(); 4 c.next(); 5 let (i1, _) = c.next().unwrap(); 6 c.next(); 7 let (i3, _) = c.next().unwrap(); 8 println!("str = {}", s); 9 println!("sub = {}", &s[i1..i3]); 10} 11

https://doc.rust-lang.org/std/primitive.str.html#method.char_indices

投稿2018/05/15 19:13

termoshtt

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問