Scala-文字列
この章では、Scalaストリングについて説明します。Scalaでは、Javaと同様に、文字列は不変のオブジェクト、つまり変更できないオブジェクトです。一方、配列のように変更できるオブジェクトは、可変オブジェクトと呼ばれます。文字列は非常に便利なオブジェクトです。このセクションの残りの部分では、次の重要なメソッドを紹介します。java.lang.String クラス。
文字列の作成
次のコードを使用して文字列を作成できます-
var greeting = "Hello world!";
or
var greeting:String = "Hello world!";
コンパイラがコード内で文字列リテラルを検出すると、その値(この場合は「Helloworld!」)を使用してStringオブジェクトを作成します。上記のように、Stringキーワードを代替宣言で指定することもできます。
次のサンプルプログラムを試してください。
例
object Demo {
val greeting: String = "Hello, world!"
def main(args: Array[String]) {
println( greeting )
}
}
上記のプログラムをに保存します Demo.scala。このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Hello, world!
前述のように、Stringクラスは不変です。一度作成した文字列オブジェクトは変更できません。文字列に多くの変更を加える必要がある場合は、Scala!で利用可能なString BuilderClassを使用してください。
文字列の長さ
オブジェクトに関する情報を取得するために使用されるメソッドは、アクセサーメソッドと呼ばれます。文字列で使用できるアクセサメソッドの1つは、文字列オブジェクトに含まれる文字数を返すlength()メソッドです。
次のコードセグメントを使用して、文字列の長さを見つけます-
例
object Demo {
def main(args: Array[String]) {
var palindrome = "Dot saw I was Tod";
var len = palindrome.length();
println( "String Length is : " + len );
}
}
上記のプログラムをに保存します Demo.scala。このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
String Length is : 17
文字列の連結
Stringクラスには、2つの文字列を連結するためのメソッドが含まれています-
string1.concat(string2);
これは、最後にstring2が追加されたstring1である新しい文字列を返します。−のように、文字列リテラルでconcat()メソッドを使用することもできます。
"My name is ".concat("Zara");
文字列は、-のように、より一般的に+演算子で連結されます。
"Hello," + " world" + "!"
結果として-
"Hello, world!"
文字列の長さを見つけるための次のコード行。
例
object Demo {
def main(args: Array[String]) {
var str1 = "Dot saw I was ";
var str2 = "Tod";
println("Dot " + str1 + str2);
}
}
上記のプログラムをに保存します Demo.scala。このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Dot Dot saw I was Tod
フォーマット文字列の作成
フォーマットされた数値で出力を出力するためのprintf()メソッドとformat()メソッドがあります。Stringクラスには、PrintStreamオブジェクトではなくStringオブジェクトを返す同等のクラスメソッドformat()があります。
printf()メソッドを使用する次のサンプルプログラムを試してください-
例
object Demo {
def main(args: Array[String]) {
var floatVar = 12.456
var intVar = 2000
var stringVar = "Hello, Scala!"
var fs = printf("The value of the float variable is " + "%f, while the value of the integer " + "variable is %d, and the string" + "is %s", floatVar, intVar, stringVar);
println(fs)
}
}
上記のプログラムをに保存します Demo.scala。このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
The value of the float variable is 12.456000,
while the value of the integer variable is 2000,
and the string is Hello, Scala!()
文字列補間
文字列補間は、Scalaプログラミング言語で文字列を作成するための新しい方法です。この機能は、Scala-2.10以降のバージョンをサポートします。文字列補間:変数参照をプロセス文字列リテラルに直接埋め込むメカニズム。
文字列補間の実装には3つのタイプ(補間器)があります。
's'文字列補間
リテラル「s」を使用すると、文字列の前に「s」を付けると、文字列の処理で変数を直接使用できます。文字列で使用できるスコープ内の任意の文字列変数。以下は、 's'文字列補間のさまざまな使用法です。
次のサンプルコードスニペットは、printlnステートメントの通常の文字列(Hello)に文字列変数($ name)を追加する際の「s」補間器の実装です。
val name = “James”
println(s “Hello, $name”) //output: Hello, James
文字列補間器は、任意の式を処理することもできます。's'文字列補間を使用して任意の式($ {1 + 1})で文字列(1 + 1)を処理するための次のコードスニペット。'$ {}'には任意の式を埋め込むことができます。
println(s “1 + 1 = ${1 + 1}”) //output: 1 + 1 = 2
's'補間器を実装する次のサンプルプログラムを試してください。
例
object Demo {
def main(args: Array[String]) {
val name = "James"
println(s"Hello, $name")
println(s"1 + 1 = ${1 + 1}")
}
}
上記のプログラムをに保存します Demo.scala。このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Hello, James
1 + 1 = 2
'f'補間器
リテラルの「f」補間器を使用すると、C言語のprintfと同様に、フォーマットされた文字列を作成できます。'f'補間器を使用している間、すべての変数参照の後にはprintf %d、%i、%fなどのスタイル形式指定子。
浮動小数点値(高さ= 1.9d)と文字列変数(名前=「James」)を通常の文字列で追加する例を見てみましょう。'f'補間器を実装する次のコードスニペット。ここで、印刷する$ name%s(文字列変数)Jamesと印刷する$ height%2.2f(浮動小数点値)1.90。
val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall") //James is 1.90 meters tall
これはタイプセーフです(つまり、変数参照と次のフォーマット指定子が一致する必要があります。一致しない場合はエラーが表示されます。'f'補間器は、Javaで使用可能な文字列形式ユーティリティ(形式指定子)を利用します。デフォルトでは、変数参照の後に%文字はありません。%s(文字列)と見なされます。
「生の」補間器
'raw'補間器は、文字列内のリテラルのエスケープを実行しないことを除いて、 's'補間器に似ています。表内の次のコードスニペットは、「s」と「raw」の補間器の使用法が異なります。's'使用法 '\ n'の出力では、改行として効果があり、 'raw'使用法の出力では、 '\ n'は効果がありません。エスケープ文字を含む完全な文字列を出力します。
's'補間器の使用法 | 「生の」補間器の使用法 |
---|---|
Program − |
Program − |
Output − |
Output − |
文字列メソッド
以下は、によって定義されたメソッドのリストです。 java.lang.String クラスであり、Scalaプログラムで直接使用できます-
シニア番号 | 説明付きのメソッド |
---|---|
1 | char charAt(int index) 指定されたインデックスの文字を返します。 |
2 | int compareTo(Object o) この文字列を別のオブジェクトと比較します。 |
3 | int compareTo(String anotherString) 2つの文字列を辞書式に比較します。 |
4 | int compareToIgnoreCase(String str) 大文字と小文字の違いを無視して、2つの文字列を辞書式に比較します。 |
5 | String concat(String str) 指定された文字列をこの文字列の末尾に連結します。 |
6 | boolean contentEquals(StringBuffer sb) この文字列が指定されたStringBufferと同じ文字シーケンスを表す場合にのみ、trueを返します。 |
7 | static String copyValueOf(char[] data) 指定された配列の文字シーケンスを表す文字列を返します。 |
8 | static String copyValueOf(char[] data, int offset, int count) 指定された配列の文字シーケンスを表す文字列を返します。 |
9 | boolean endsWith(String suffix) この文字列が指定されたサフィックスで終わるかどうかをテストします。 |
10 | boolean equals(Object anObject) この文字列を指定されたオブジェクトと比較します。 |
11 | boolean equalsIgnoreCase(String anotherString) 大文字と小文字の区別を無視して、この文字列を別の文字列と比較します。 |
12 | byte getBytes() プラットフォームのデフォルトの文字セットを使用して、この文字列を一連のバイトにエンコードし、結果を新しいバイト配列に格納します。 |
13 | byte[] getBytes(String charsetName) 名前付き文字セットを使用してこの文字列をバイトシーケンスにエンコードし、結果を新しいバイト配列に格納します。 |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) この文字列から宛先文字配列に文字をコピーします。 |
15 | int hashCode() この文字列のハッシュコードを返します。 |
16 | int indexOf(int ch) 指定された文字が最初に出現するこの文字列内のインデックスを返します。 |
17 | int indexOf(int ch, int fromIndex) 指定された文字が最初に出現するこの文字列内のインデックスを返し、指定されたインデックスから検索を開始します。 |
18 | int indexOf(String str) 指定された部分文字列が最初に出現するこの文字列内のインデックスを返します。 |
19 | int indexOf(String str, int fromIndex) 指定されたインデックスから開始して、指定された部分文字列が最初に出現するこの文字列内のインデックスを返します。 |
20 | String intern() 文字列オブジェクトの正規表現を返します。 |
21 | int lastIndexOf(int ch) 指定された文字が最後に出現するこの文字列内のインデックスを返します。 |
22 | int lastIndexOf(int ch, int fromIndex) 指定された文字の最後の出現のこの文字列内のインデックスを返し、指定されたインデックスから逆方向に検索します。 |
23 | int lastIndexOf(String str) 指定された部分文字列の右端にあるこの文字列内のインデックスを返します。 |
24 | int lastIndexOf(String str, int fromIndex) 指定された部分文字列の最後の出現のこの文字列内のインデックスを返し、指定されたインデックスから逆方向に検索します。 |
25 | int length() この文字列の長さを返します。 |
26 | boolean matches(String regex) この文字列が指定された正規表現に一致するかどうかを示します。 |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int offset, int len) 2つの文字列領域が等しいかどうかをテストします。 |
28 | boolean regionMatches(int toffset, String other, int offset, int len) 2つの文字列領域が等しいかどうかをテストします。 |
29 | String replace(char oldChar, char newChar) この文字列内で出現するすべてのoldCharをnewCharに置き換えた結果の新しい文字列を返します。 |
30 | String replaceAll(String regex, String replacement 指定された正規表現に一致するこの文字列の各部分文字列を、指定された置換で置き換えます。 |
31 | String replaceFirst(String regex, String replacement) 指定された正規表現に一致するこの文字列の最初の部分文字列を、指定された置換で置き換えます。 |
32 | String[] split(String regex) 指定された正規表現の一致を中心にこの文字列を分割します。 |
33 | String[] split(String regex, int limit) 指定された正規表現の一致を中心にこの文字列を分割します。 |
34 | boolean startsWith(String prefix) この文字列が指定されたプレフィックスで始まるかどうかをテストします。 |
35 | boolean startsWith(String prefix, int toffset) この文字列が、指定されたインデックスで始まる指定されたプレフィックスで始まるかどうかをテストします。 |
36 | CharSequence subSequence(int beginIndex, int endIndex) このシーケンスのサブシーケンスである新しい文字シーケンスを返します。 |
37 | String substring(int beginIndex) この文字列の部分文字列である新しい文字列を返します。 |
38 | String substring(int beginIndex, int endIndex) この文字列の部分文字列である新しい文字列を返します。 |
39 | char[] toCharArray() この文字列を新しい文字配列に変換します。 |
40 | String toLowerCase() デフォルトのロケールの規則を使用して、この文字列内のすべての文字を小文字に変換します。 |
41 | String toLowerCase(Locale locale) 指定されたロケールのルールを使用して、この文字列内のすべての文字を小文字に変換します。 |
42 | String toString() このオブジェクト(すでに文字列です!)自体が返されます。 |
43 | String toUpperCase() デフォルトのロケールの規則を使用して、この文字列内のすべての文字を大文字に変換します。 |
44 | String toUpperCase(Locale locale) 指定されたロケールのルールを使用して、この文字列内のすべての文字を大文字に変換します。 |
45 | String trim() 前後の空白を省略して、文字列のコピーを返します。 |
46 | static String valueOf(primitive data type x) 渡されたデータ型引数の文字列表現を返します。 |