Java Language
文字列との変換
サーチ…
他のデータ型をStringに変換する
Stringクラスの
valueOf
メソッドを使用して、他のプリミティブデータ型の値をStringとして取得できます。例えば:
int i = 42; String string = String.valueOf(i); //string now equals "42”.
このメソッドは、
float
、double
、boolean
、およびObject
などの他のデータ型に対してもオーバーロードされます。.toString
を呼び出すことで、他のObject(クラスのインスタンス)をStringとして取得することもできます。これが有用な出力を与えるためには、クラスはtoString()
オーバーライドする必要があります。標準Javaライブラリクラスのほとんどは、Date
などです。例えば:
Foo foo = new Foo(); //Any class. String stringifiedFoo = foo.toString().
ここで
stringifiedFoo
にはfoo
表現がStringとして含まれています。
また、任意の数値型を以下のように短い表記法でStringに変換することもできます。
int i = 10;
String str = i + "";
それとも単純な方法です
String str = 10 + "";
バイトへの変換/バイトからの変換
文字列をバイト配列にエンコードするには、 String#getBytes()
メソッドを使用します。標準の文字セットのいずれかをJavaランタイムで使用できます。
byte[] bytes = "test".getBytes(StandardCharsets.UTF_8);
デコードする:
String testString = new String(bytes, StandardCharsets.UTF_8);
静的なインポートを使用すると、コールをさらに簡素化できます。
import static java.nio.charset.StandardCharsets.UTF_8;
...
byte[] bytes = "test".getBytes(UTF_8);
あまり一般的でない文字セットの場合は、文字セットを文字列で指定できます。
byte[] bytes = "test".getBytes("UTF-8");
その逆:
String testString = new String (bytes, "UTF-8");
これは、チェックされたUnsupportedCharsetException
を処理する必要があることを意味します。
次の呼び出しでは、デフォルトの文字セットが使用されます。デフォルトの文字セットはプラットフォーム固有であり、Windows、Mac、およびLinuxプラットフォームでは一般的に異なります。
byte[] bytes = "test".getBytes();
その逆:
String testString = new String(bytes);
無効な文字とバイトは、これらのメソッドで置換またはスキップすることができます。入力を検証するためのインスタンスのための- -より多くの制御のためにあなたが使用することを奨励しているCharsetEncoder
とCharsetDecoder
クラスを。
Base64エンコーディング/デコード
バイナリデータをbase64でエンコードした文字列としてエンコードする必要があることがあります。
このために、 javax.xml.bind
パッケージのDatatypeConverter
クラスを使用できます。
import javax.xml.bind.DatatypeConverter;
import java.util.Arrays;
// arbitrary binary data specified as a byte array
byte[] binaryData = "some arbitrary data".getBytes("UTF-8");
// convert the binary data to the base64-encoded string
String encodedData = DatatypeConverter.printBase64Binary(binaryData);
// encodedData is now "c29tZSBhcmJpdHJhcnkgZGF0YQ=="
// convert the base64-encoded string back to a byte array
byte[] decodedData = DatatypeConverter.parseBase64Binary(encodedData);
// assert that the original data and the decoded data are equal
assert Arrays.equals(binaryData, decodedData);
Apache commons-codec
あるいは、 Apache commons-codecの Base64
を使用することもできます。
import org.apache.commons.codec.binary.Base64;
// your blob of binary as a byte array
byte[] blob = "someBinaryData".getBytes();
// use the Base64 class to encode
String binaryAsAString = Base64.encodeBase64String(blob);
// use the Base64 class to decode
byte[] blob2 = Base64.decodeBase64(binaryAsAString);
// assert that the two blobs are equal
System.out.println("Equal : " + Boolean.toString(Arrays.equals(blob, blob2)));
このプログラムを実行すると、 someBinaryData
が非常に管理しやすいUTF-8 Stringオブジェクトであるc29tZUJpbmFyeURhdGE=
にエンコードされていることがわかります。
文字列を数値に解析する
文字列をプリミティブな数値型または数値のラッパー型に変換します。
各数値ラッパークラスは、 String
を対応するプリミティブ型に変換するparseXxx
メソッドを提供します。次のコードは、 Integer.parseInt
メソッドを使用してString
をint
変換しInteger.parseInt
。
String string = "59";
int primitive = Integer.parseInteger(string);
数値ラッパークラスのインスタンスにString
に変換するには、ラッパークラスvalueOf
メソッドのオーバーロードを使用するか、
String string = "59";
Integer wrapper = Integer.valueOf(string);
または自動ボクシング(Java 5以降)に依存している:
String string = "59";
Integer wrapper = Integer.parseInteger(string); // 'int' result is autoboxed
上記のパターンは、 byte
、 short
、 int
、 long
、 float
およびdouble
、および対応するラッパークラス( Byte
、 Short
、 Integer
、 Long
、 Float
およびDouble
)で機能します。
基数を使用して文字列を整数に変換する:
String integerAsString = "0101"; // binary representation
int parseInt = Integer.parseInt(integerAsString,2);
Integer valueOfInteger = Integer.valueOf(integerAsString,2);
System.out.println(valueOfInteger); // prints 5
System.out.println(parseInt); // prints 5
例外
許容されない数値表現でないか、範囲外の値を表す文字列に対して、数値のvalueOf(String)
またはparseXxx(...)
メソッドが呼び出された場合、チェックされていないNumberFormatException例外がスローされます。
`InputStream`から` String`を得る
String
は、バイト配列コンストラクタを使用してInputStream
から読み取ることができます。
import java.io.*;
public String readString(InputStream input) throws IOException {
byte[] bytes = new byte[50]; // supply the length of the string in bytes here
input.read(bytes);
return new String(bytes);
}
これは、システムのデフォルトの文字セットを使用しますが、代替の文字セットを指定することもできます。
return new String(bytes, Charset.forName("UTF-8"));
文字列を他のデータ型に変換する
数値文字列を次のようにさまざまなJava数値型に変換できます。
intからintへの文字列:
String number = "12";
int num = Integer.parseInt(number);
浮動する文字列:
String number = "12.0";
float num = Float.parseFloat(number);
doubleにする文字列:
String double = "1.47";
double num = Double.parseDouble(double);
ブール値への文字列:
String falseString = "False";
boolean falseBool = Boolean.parseBoolean(falseString); // falseBool = false
String trueString = "True";
boolean trueBool = Boolean.parseBoolean(trueString); // trueBool = true
文字列を長くする:
String number = "47";
long num = Long.parseLong(number);
BigIntegerへの文字列:
String bigNumber = "21";
BigInteger reallyBig = new BigInteger(bigNumber);
文字列をBigDecimalに変換する:
String bigFraction = "17.21455";
BigDecimal reallyBig = new BigDecimal(bigFraction);
変換の例外:
上記の数値変換は、適切に書式化された数値ではない文字列を解析しようとすると、(チェックされていない) NumberFormatException
スローしNumberFormatException
。 「 例外」トピックでは、そのような例外を処理する方法について説明します。
文字列を解析できることをテストする場合は、次のようにtryParse...
メソッドを実装できます。
boolean tryParseInt (String value) {
try {
String somechar = Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
しかし、このtryParse...
メソッドを解析する直前に呼び出すことは、(間違いなく)貧弱な方法です。 parse...
メソッドを呼び出して例外を処理parse...
方が良いでしょう。