Rust-string

提供:Dev Guides
移動先:案内検索

錆-文字列

Rustの文字列データ型は、次のように分類することができます-

  • 文字列リテラル(&str)
  • 文字列オブジェクト*(文字列) *

文字列リテラル

コンパイル時に文字列の値がわかっている場合は、文字列リテラル(&str)が使用されます。 文字列リテラルは、変数にハードコーディングされた文字のセットです。 たとえば、_let company = "Tutorials Point" _です。 文字列リテラルはモジュールstd
strにあります。 文字列リテラルは、文字列スライスとも呼ばれます。

次の例では、_company_と_location_の2つの文字列リテラルを宣言しています。

fn main() {
   let company:&str="finddevguides";
   let location:&str = "Hyderabad";
   println!("company is : {} location :{}",company,location);
}

文字列リテラルはデフォルトでは静的です。 これは、文字列リテラルがプログラム全体の期間中有効であることが保証されていることを意味します。 以下に示すように、変数を静的として明示的に指定することもできます-

fn main() {
   let company:&'static str = "finddevguides";
   let location:&'static str = "Hyderabad";
   println!("company is : {} location :{}",company,location);
}

上記のプログラムは、次の出力を生成します-

company is : finddevguides location :Hyderabad

文字列オブジェクト

Stringオブジェクトタイプは標準ライブラリで提供されます。 文字列リテラルとは異なり、文字列オブジェクトタイプはコア言語の一部ではありません。 これは、標準ライブラリ_pub struct String_でパブリック構造として定義されています。 文字列は成長可能なコレクションです。 可変でUTF-8でエンコードされたタイプです。* String *オブジェクトタイプは、実行時に提供される文字列値を表すために使用できます。 文字列オブジェクトはヒープに割り当てられます。

構文

文字列オブジェクトを作成するには、次の構文のいずれかを使用できます-

String::new()

上記の構文は空の文字列を作成します

String::from()

これにより、パラメータとして* from()*メソッドに渡されるデフォルト値を持つ文字列が作成されます。

次の例は、Stringオブジェクトの使用法を示しています。

fn main(){
   let empty_string = String::new();
   println!("length is {}",empty_string.len());

   let content_string = String::from("finddevguides");
   println!("length is {}",content_string.len());
}

上記の例では、2つの文字列を作成します。_new_メソッドを使用した空の文字列オブジェクトと、_from_メソッドを使用した文字列リテラルからの文字列オブジェクトです。

出力は次のようになります-

length is 0
length is 14

一般的なメソッド-文字列オブジェクト

Sr.No. Method Signature Description
1 new() pub const fn new() → String Creates a new empty String.
2 to_string() fn to_string(&self) → String Converts the given value to a String.
3 replace() pub fn replace<'a, P>(&'a self, from: P, to: &str) → String Replaces all matches of a pattern with another string.
4 as_str() pub fn as_str(&self) → &str Extracts a string slice containing the entire string.
5 push() pub fn push(&mut self, ch: char) Appends the given char to the end of this String.
6 push_str() pub fn push_str(&mut self, string: &str) Appends a given string slice onto the end of this String.
7 len() pub fn len(&self) → usize Returns the length of this String, in bytes.
8 trim() pub fn trim(&self) → &str Returns a string slice with leading and trailing whitespace removed.
9 split_whitespace() pub fn split_whitespace(&self) → SplitWhitespace Splits a string slice by whitespace and returns an iterator.
10 split() pub fn split<'a, P>(&'a self, pat: P) → Split<'a, P> , where P is pattern can be &str, char, or a closure that determines the split. Returns an iterator over substrings of this string slice, separated by characters matched by a pattern.
11 chars() pub fn chars(&self) → Chars Returns an iterator over the chars of a string slice.

イラスト:new()

*_new()_* メソッドを使用して空の文字列オブジェクトが作成され、その値は_hello_に設定されます。
fn main(){
   let mut z = String::new();
   z.push_str("hello");
   println!("{}",z);
}

出力

上記のプログラムは、次の出力を生成します-

hello

イラスト:to_string()

Stringオブジェクトのすべてのメソッドにアクセスするには、 _ to_string()_ 関数を使用して文字列リテラルをオブジェクトタイプに変換します。

fn main(){
   let name1 = "Hello finddevguides ,
   Hello!".to_string();
   println!("{}",name1);
}

出力

上記のプログラムは、次の出力を生成します-

Hello finddevguides , Hello!

イラスト:replace()

*_replace()_* 関数は2つのパラメーターを取ります。最初のパラメーターは検索する文字列パターンで、2番目のパラメーターは置換される新しい値です。 上記の例では、_Hello_は_name1_文字列に2回現れます。

replace関数は、出現するすべての文字列 HelloHowdy に置き換えます。

fn main(){
   let name1 = "Hello finddevguides ,
   Hello!".to_string();        //String object
   let name2 = name1.replace("Hello","Howdy");   //find and replace
   println!("{}",name2);
}

出力

上記のプログラムは、次の出力を生成します-

Howdy finddevguides , Howdy!

イラスト:as_str()

  • as_str()*関数は、文字列全体を含む文字列スライスを抽出します。
fn main() {
   let example_string = String::from("example_string");
   print_literal(example_string.as_str());
}
fn print_literal(data:&str ){
   println!("displaying string literal {}",data);
}

出力

上記のプログラムは、次の出力を生成します-

displaying string literal example_string

イラスト:push()

  • push()*関数は、指定されたcharをこのStringの末尾に追加します。
fn main(){
   let mut company = "Tutorial".to_string();
   company.push('s');
   println!("{}",company);
}

出力

上記のプログラムは、次の出力を生成します-

Tutorials

イラスト:push_str()

  • push_str()*関数は、指定された文字列スライスを文字列の最後に追加します。
fn main(){
   let mut company = "Tutorials".to_string();
   company.push_str(" Point");
   println!("{}",company);
}

出力

上記のプログラムは、次の出力を生成します-

Tutorials Point

イラスト:len()

  • len()*関数は、文字列(スペースを含む)の合計文字数を返します。
fn main() {
   let fullname = " Tutorials Point";
   println!("length is {}",fullname.len());
}

出力

上記のプログラムは、次の出力を生成します-

length is 20

イラスト:trim()

trim()関数は、文字列の先頭と末尾のスペースを削除します。 この関数はインラインスペースを削除しないことに注意してください。

fn main() {
   let fullname = " Tutorials Point \r\n";
   println!("Before trim ");
   println!("length is {}",fullname.len());
   println!();
   println!("After trim ");
   println!("length is {}",fullname.trim().len());
}

出力

上記のプログラムは、次の出力を生成します-

Before trim
length is 24

After trim
length is 15

イラスト:split_whitespace()

*_split_whitespace()_* は、入力文字列を異なる文字列に分割します。 イテレータを返すので、以下に示すようにトークンを繰り返し処理しています-
fn main(){
   let msg = "Tutorials Point has good t
   utorials".to_string();
   let mut i = 1;

   for token in msg.split_whitespace(){
      println!("token {} {}",i,token);
      i+=1;
   }
}

出力

token 1 Tutorials
token 2 Point
token 3 has
token 4 good
token 5 tutorials

イラスト:split()string

*split()string* メソッドは、パターンに一致する文字で区切られた、文字列スライスの部分文字列の反復子を返します。 split()メソッドの制限は、結果を後で使用するために保存できないことです。 *_collect_* メソッドを使用して、split()によって返された結果をベクトルとして保存できます。
fn main() {
   let fullname = "Kannan,Sudhakaran,finddevguides";

   for token in fullname.split(","){
      println!("token is {}",token);
   }

  //store in a Vector
   println!("\n");
   let tokens:Vec<&str>= fullname.split(",").collect();
   println!("firstName is {}",tokens[0]);
   println!("lastname is {}",tokens[1]);
   println!("company is {}",tokens[2]);
}

上記の例では、コンマ*(、)が検出されるたびに、文字列 *fullname を分割します。

出力

token is Kannan
token is Sudhakaran
token is finddevguides

firstName is Kannan
lastname is Sudhakaran
company is finddevguides

イラスト:chars()

文字列内の個々の文字には、charsメソッドを使用してアクセスできます。 これを理解するための例を考えてみましょう。

fn main(){
   let n1 = "Tutorials".to_string();

   for n in n1.chars(){
      println!("{}",n);
   }
}

出力

T
u
t
o
r
i
a
l
s

+演算子を使用した文字列の連結

文字列値を別の文字列に追加できます。 これは、連結または補間と呼ばれます。 文字列連結の結果は、新しい文字列オブジェクトです。 +演算子は、add_メソッドを内部的に使用します。 add関数の構文は2つのパラメーターを取ります。 最初のパラメーターは_self –文字列オブジェクト自体であり、2番目のパラメーターは2番目の文字列オブジェクトの参照です。 これは以下に示されています-

//add function
add(self,&str)->String {
  //returns a String object
}

図:ストリング連結

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();

   let n3 = n1 + &n2;//n2 reference is passed
   println!("{}",n3);
}

出力は以下のようになります

finddevguides

イラスト:タイプキャスト

次の例は、数値を文字列オブジェクトに変換する方法を示しています-

fn main(){
   let number = 2020;
   let number_as_string = number.to_string();

  //convert number to string
   println!("{}",number_as_string);
   println!("{}",number_as_string=="2020");
}

出力は以下のようになります

2020
true

イラスト:フォーマット! マクロ

Stringオブジェクトに一緒に追加する別の方法は、formatというマクロ関数を使用することです。 Formatの使用! 以下に示すとおりです。

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();
   let n3 = format!("{} {}",n1,n2);
   println!("{}",n3);
}

出力は以下のようになります

Tutorials Point