Java文字列変換

Java文字列変換

1. 概要

この簡単な記事では、StringオブジェクトをJavaでサポートされているさまざまなデータ型に簡単に変換する方法について説明します。

2. StringintまたはIntegerに変換する

StringをプリミティブintまたはIntegerラッパータイプに変換する必要がある場合は、parseInt()またはvalueOf() APIを使用して、対応するintまたはIntegerの戻り値:

@Test
public void whenConvertedToInt_thenCorrect() {
    String beforeConvStr = "1";
    int afterConvInt = 1;

    assertEquals(Integer.parseInt(beforeConvStr), afterConvInt);
}

@Test
public void whenConvertedToInteger_thenCorrect() {
    String beforeConvStr = "12";
    Integer afterConvInteger = 12;

    assertEquals(Integer.valueOf(beforeConvStr).equals(afterConvInteger), true);
}

3. StringlongまたはLongに変換する

StringをプリミティブlongまたはLongラッパータイプに変換する必要がある場合は、それぞれparseLong()またはvalueOf()を使用できます。

@Test
public void whenConvertedTolong_thenCorrect() {
    String beforeConvStr = "12345";
    long afterConvLongPrimitive = 12345;

    assertEquals(Long.parseLong(beforeConvStr), afterConvLongPrimitive);
}

@Test
public void whenConvertedToLong_thenCorrect() {
    String beforeConvStr = "14567";
    Long afterConvLong = 14567l;

    assertEquals(Long.valueOf(beforeConvStr).equals(afterConvLong), true);
}

4. StringdoubleまたはDoubleに変換する

StringをプリミティブdoubleまたはDoubleラッパータイプに変換する必要がある場合は、それぞれparseDouble()またはvalueOf()を使用できます。

@Test
public void whenConvertedTodouble_thenCorrect() {
    String beforeConvStr = "1.4";
    double afterConvDoublePrimitive = 1.4;

    assertEquals(Double.parseDouble(beforeConvStr), afterConvDoublePrimitive, 0.0);
}

@Test
public void whenConvertedToDouble_thenCorrect() {
    String beforeConvStr = "145.67";
    double afterConvDouble = 145.67d;

    assertEquals(Double.valueOf(beforeConvStr).equals(afterConvDouble), true);
}

5. StringByteArrayに変換する

Stringをバイト配列に変換するために、getBytes()は、プラットフォームのデフォルトの文字セットを使用してStringをバイトのシーケンスにエンコードし、結果を新しいバイト配列に格納します。

渡されたStringがデフォルトの文字セットを使用してエンコードできない場合、getBytes()の動作は指定されていません。 Javadocumentationに従って、エンコードプロセスをさらに制御する必要がある場合は、java.nio.charset.CharsetEncoderクラスを使用する必要があります。

@Test
public void whenConvertedToByteArr_thenCorrect() {
    String beforeConvStr = "abc";
    byte[] afterConvByteArr = new byte[] { 'a', 'b', 'c' };

    assertEquals(Arrays.equals(beforeConvStr.getBytes(), afterConvByteArr), true);
}

6. StringCharArrayに変換する

StringCharArrayインスタンスに変換するには、単純にtoCharArray()を使用できます。

@Test
public void whenConvertedToCharArr_thenCorrect() {
    String beforeConvStr = "hello";
    char[] afterConvCharArr = { 'h', 'e', 'l', 'l', 'o' };

    assertEquals(Arrays.equals(beforeConvStr.toCharArray(), afterConvCharArr), true);
}

7. StringbooleanまたはBooleanに変換する

StringインスタンスをプリミティブbooleanまたはBooleanラッパータイプに変換するには、それぞれparseBoolean()またはvalueOf()APIを使用できます。

@Test
public void whenConvertedToboolean_thenCorrect() {
    String beforeConvStr = "true";
    boolean afterConvBooleanPrimitive = true;

    assertEquals(Boolean.parseBoolean(beforeConvStr), afterConvBooleanPrimitive);
}

@Test
public void whenConvertedToBoolean_thenCorrect() {
    String beforeConvStr = "true";
    Boolean afterConvBoolean = true;

    assertEquals(Boolean.valueOf(beforeConvStr), afterConvBoolean);
}

8. StringDateまたはLocalDateTimeに変換する

Java 6は、日付を表すためのjava.util.Dateデータ型を提供します。 Java 8は、古いjava.util.Datejava.util.Calendarの欠点に対処するために、DateTimeに新しいAPIを導入しました。

詳細については、thisの記事を参照してください。

8.1. Stringjava.util.Dateに変換する

StringオブジェクトをDateオブジェクトに変換するには、最初に、日付と時刻の形式を表すパターンを渡して、SimpleDateFormatオブジェクトを作成する必要があります。

たとえば、パターンの可能な値は「MM-dd-yyyy」または「yyyy-MM-dd」です。 次に、Stringを渡すparseメソッドを呼び出す必要があります。

引数として渡されるStringは、パターンと同じ形式である必要があります。 それ以外の場合、実行時にParseExceptionがスローされます。

@Test
public void whenConvertedToDate_thenCorrect() throws ParseException {
    String beforeConvStr = "15/10/2013";
    int afterConvCalendarDay = 15;
    int afterConvCalendarMonth = 9;
    int afterConvCalendarYear = 2013;
    SimpleDateFormat formatter = new SimpleDateFormat("dd/M/yyyy");
    Date afterConvDate = formatter.parse(beforeConvStr);
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(afterConvDate);

    assertEquals(calendar.get(Calendar.DAY_OF_MONTH), afterConvCalendarDay);
    assertEquals(calendar.get(Calendar.MONTH), afterConvCalendarMonth);
    assertEquals(calendar.get(Calendar.YEAR), afterConvCalendarYear);
}

8.2. Stringjava.time.LocalDateTimeに変換する

LocalDateTimeは、時刻を表す不変の日時オブジェクトであり、多くの場合、年-月-日-時-分-秒と見なされます。

StringオブジェクトをLocalDateTimeオブジェクトに変換するには、parseAPIを使用するだけです。

@Test
public void whenConvertedToLocalDateTime_thenCorrect() {
    String str = "2007-12-03T10:15:30";
    int afterConvCalendarDay = 03;
    Month afterConvCalendarMonth = Month.DECEMBER;
    int afterConvCalendarYear = 2007;
    LocalDateTime afterConvDate
      = new UseLocalDateTime().getLocalDateTimeUsingParseMethod(str);

    assertEquals(afterConvDate.getDayOfMonth(), afterConvCalendarDay);
    assertEquals(afterConvDate.getMonth(), afterConvCalendarMonth);
    assertEquals(afterConvDate.getYear(), afterConvCalendarYear);
}

Stringは、java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME. に従って有効な時間を表す必要があります。そうでない場合、実行時にParseExceptionがスローされます。

[.s2]#For example ‘2011-12-03‘ represents a valid string format having 4 digits for the year, 2 digits for the month for a year and 2 digits for the day of the month#。

9. 結論

このクイックチュートリアルでは、StringオブジェクトをJavaでサポートされているさまざまなデータ型に変換するためのさまざまなユーティリティメソッドについて説明しました。

この記事の完全なソースコードとすべてのコードスニペットは、over on GitHubで入手できます。