Scala-strings
Scala-ストリング
この章では、Scala Stringsについて説明します。 Javaのように、Scalaでは、文字列は不変オブジェクト、つまり変更できないオブジェクトです。 一方、配列などの変更可能なオブジェクトは、可変オブジェクトと呼ばれます。 文字列は非常に便利なオブジェクトです。このセクションの残りの部分では、 java.lang.String クラスの重要なメソッドを紹介します。
文字列を作成する
次のコードは、文字列を作成するために使用することができます-
var greeting = "Hello world!";
or
var greeting:String = "Hello world!";
コンパイラは、コード内で文字列リテラルを検出するたびに、その値(この場合は「Hello world!」)で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!で利用可能な文字列ビルダークラスを使用してください。
ストリングの長さ
オブジェクトに関する情報を取得するために使用されるメソッドは、アクセサメソッドと呼ばれます。 文字列で使用できるアクセサメソッドの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
文字列の連結
文字列クラスには、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」を先頭に追加するときに、文字列の処理で変数を直接使用できます。 Stringで使用できるスコープ内のString変数。 以下は、「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)と文字列変数(name =“ 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(文字列)と見なされます。
「生」補間器
「生」補間は、文字列内のリテラルのエスケープを実行しないことを除いて、「s」補間と似ています。 次の表のコードスニペットは、「s」および「raw」補間の使用法が異なります。 「s」の使用の出力では「\ n」の効果は改行として、「生」の使用の出力では「\ n」の効果はありません。 エスケープ文字を含む完全な文字列を出力します。
‘s’ interpolator usage | ‘raw’ interpolator usage |
---|---|
a |
[source,prettyprint,notranslate] ---- object Demo { def main(args: Array[String]) { println(raw"Result = \n a \n b") } } ---- a |
出力- [source,result,notranslate] ---- Result = a b ---- a |
出力- [source,result,notranslate] ---- Result = \n a \n b ---- |
文字列メソッド
以下は java.lang.String クラスで定義されているメソッドのリストであり、Scalaプログラムで直接使用できます-
Sr.No | Methods with Description |
---|---|
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) このStringが指定された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) 渡されたデータ型引数の文字列表現を返します。 |