Scala 文字列
次の例では、文字列を定数に代入します。
例
val greeting: String = "Hello,World!"
def main(args: Array[String]) {
println( greeting )
}
}
上記の例では、変数 greeting を文字列定数として定義しています。その型は次のとおりです。String (java.lang.String)。
Scala では、文字列の型は実際には Java String であり、Scala 自体には String クラスはありません。
Scala では、String は不変オブジェクトであり、そのオブジェクトは変更できません。つまり、文字列を変更すると、新しい文字列オブジェクトが生成されることを意味します。
ただし、配列などの他のオブジェクトは可変オブジェクトです。次に、よく使われる java.lang.String メソッドを紹介します。
文字列の作成
文字列を作成する例は次のとおりです。
val greeting = "Hello World!"; 或 val greeting:String = "Hello World!";
文字列に String 型を指定する必要は必ずしもありません。Scala コンパイラが文字列の型を String として自動的に推論するからです。
もちろん、次の例のように文字列を String 型として明示的に宣言することもできます。
例
val greeting: String = "Hello, World!"
def main(args: Array[String]) {
println( greeting )
}
}
上記のコードを実行すると、出力結果は次のようになります。
$ scalac Test.scala $ scala Test Hello, world!
先ほど String オブジェクトは不変であると述べました。変更可能な文字列を作成する必要がある場合は、String Builder クラスを使用できます。次の例を参照してください。
例
def main(args: Array[String]) {
val buf = new StringBuilder;
buf += 'a'
buf ++= "bcdef"
println( "buf is : " + buf.toString );
}
}
上記のコードを実行すると、出力結果は次のようになります。
$ scalac Test.scala $ scala Test buf is : abcdef
文字列の長さ
length() メソッドを使用して文字列の長さを取得できます。
例
def main(args: Array[String]) {
var palindrome = "www.example.com";
var len = palindrome.length();
println( "String Length is : " + len );
}
}
上記のコードを実行すると、出力結果は次のようになります。
$ scalac Test.scala $ scala Test String Length is : 14
文字列の連結
String クラスでは、concat() メソッドを使用して2つの文字列を連結します。
string1.concat(string2);
例によるデモ:
scala> "サンプル官网: ".concat("www.example.com");
res0: String = サンプル官网: www.example.com
同様に、プラス記号(+)を使用して連結することもできます。
scala> "サンプル官网: " + " www.example.com" res1: String = サンプル官网: www.example.com
完全な例を見てみましょう。
例
def main(args: Array[String]) {
var str1 = "サンプル公式サイト:";
var str2 = "www.example.com";
var str3 = "サンプルのスローガンは:";
var str4 = "学ぶのは技術だけではなく、夢でもあります!";
println( str1 + str2 );
println( str3.concat(str4) );
}
}
上記のコードを実行すると、出力結果は次のようになります。
$ scalac Test.scala $ scala Test サンプル官网:www.example.com サンプル的 Slogan 为:学的不仅是技术,更是梦想!
フォーマット文字列の作成
String クラスでは、printf() メソッドを使用して文字列をフォーマットして出力できます。String format() メソッドは PrintStream オブジェクトではなく String オブジェクトを返します。次の例は printf() メソッドの使用法を示しています。
例
def main(args: Array[String]) {
var floatVar = 12.456
var intVar = 2000
var stringVar = "サンプル!"
var fs = printf("浮動小数点型の変数は " +
"%f、整数型の変数は %d、文字列は " +
" %s", floatVar, intVar, stringVar)
println(fs)
}
}
上記のコードを実行すると、出力結果は次のようになります。
$ scalac Test.scala $ scala Test 浮点型变量为 12.456000, 整型变量为 2000, 字符串为 サンプル!()
String メソッド
次の表に、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 と比較します。 |
| 7 |
static String copyValueOf(char[] data) 指定された配列内の文字シーケンスを表す String を返します。 |
| 8 |
static String copyValueOf(char[] data, int offset, int count) 指定された配列内の文字シーケンスを表す String を返します。 |
| 9 |
boolean endsWith(String suffix) この文字列が指定された接尾辞で終わるかどうかをテストします。 |
| 10 |
boolean equals(Object anObject) この文字列を指定されたオブジェクトと比較します。 |
| 11 |
boolean equalsIgnoreCase(String anotherString) この String を別の String と比較します。大文字と小文字は区別されません。 |
| 12 |
byte getBytes() プラットフォームのデフォルト文字セットを使用してこの String を byte シーケンスにエンコードし、結果を新しい byte 配列に格納します。 |
| 13 |
byte[] getBytes(String charsetName 指定された文字セットを使用してこの String を byte シーケンスにエンコードし、結果を新しい byte 配列に格納します。 |
| 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 ooffset, int len) 2つの文字列領域が等しいかどうかをテストします。 |
| 28 |
boolean regionMatches(int toffset, String other, int ooffset, int len) 2つの文字列領域が等しいかどうかをテストします。 |
| 29 |
String replace(char oldChar, char newChar) この文字列内に出現するすべての oldChar を newChar で置き換えた新しい文字列を返します。 |
| 30 |
String replaceAll(String regex, String replacement 指定された正規表現に一致するこの文字列のすべての部分文字列を、指定された replacement で置き換えます。 |
| 31 |
String replaceFirst(String regex, String replacement) この文字列内で指定された正規表現に一致する最初の部分文字列を、指定された 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() デフォルトのロケールの規則を使用して、この String 内のすべての文字を小文字に変換します。 |
| 41 |
String toLowerCase(Locale locale) 指定された Locale の規則を使用して、この String 内のすべての文字を小文字に変換します。 |
| 42 |
String toString() このオブジェクト自体を返します(すでに文字列です!)。 |
| 43 |
String toUpperCase() デフォルトのロケールの規則を使用して、この String 内のすべての文字を大文字に変換します。 |
| 44 |
String toUpperCase(Locale locale) 指定された Locale の規則を使用して、この String 内のすべての文字を大文字に変換します。 |
| 45 |
String trim() 指定された文字列の先頭と末尾の空白を削除します。 |
| 46 |
static String valueOf(primitive data type x) 指定された型の引数の文字列表現を返します。 |