サーチ…


他のデータ型をStringに変換する

  • StringクラスのvalueOfメソッドを使用して、他のプリミティブデータ型の値をStringとして取得できます。

    例えば:

    int i = 42;
    String string = String.valueOf(i);
    //string now equals "42”.
    

    このメソッドは、 floatdoubleboolean 、および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);

無効な文字とバイトは、これらのメソッドで置換またはスキップすることができます。入力を検証するためのインスタンスのための- -より多くの制御のためにあなたが使用することを奨励しているCharsetEncoderCharsetDecoderクラスを。

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=にエンコードされていることがわかります。


Java SE 8

その詳細はBase64で確認できます

// encode with padding
String encoded = Base64.getEncoder().encodeToString(someByteArray);

// encode without padding
String encoded = Base64.getEncoder().withoutPadding().encodeToString(someByteArray);

// decode a String
byte [] barr = Base64.getDecoder().decode(encoded); 

参照

文字列を数値に解析する

文字列をプリミティブな数値型または数値のラッパー型に変換します。

各数値ラッパークラスは、 Stringを対応するプリミティブ型に変換するparseXxxメソッドを提供します。次のコードは、 Integer.parseIntメソッドを使用してStringint変換し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

上記のパターンは、 byteshortintlongfloatおよびdouble 、および対応するラッパークラス( ByteShortIntegerLongFloatおよび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...方が良いでしょう。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow