1. 概述

在这篇简短的文章中,我们将探讨如何将String对象转换为Java支持的不同数据类型。

2. 将String转换为intInteger

若需要将String转换为基本类型intInteger包装类,我们可以使用parseInt()valueOf()方法获取相应的整数值:

@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. 将String转换为longLong

如果需要将String转换为基本类型longLong包装类,我们可以分别使用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. 将String转换为doubleDouble

若需将String转换为基本类型doubleDouble包装类,同样可以使用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. 将String转换为byte[]

要将String转换为字节数组,可以使用getBytes()方法,它会根据平台默认字符集将String编码成字节序列,并存储到新的字节数组中。

当传入的String无法使用默认字符集进行编码时,getBytes()的行为是未定义的。根据Java文档此处,当需要更多控制编码过程时,应使用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. 将String转换为CharArray

要将String转换为CharArray实例,可以简单地使用toCharArray()方法:

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

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

7. 将String转换为booleanBoolean

要将String实例转换为基本类型booleanBoolean包装类,可以使用parseBoolean()valueOf()方法:

@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. 将String转换为DateLocalDateTime

Java 6提供了java.util.Date类型来表示日期。Java 8引入了新的日期和时间API以解决旧的java.util.Datejava.util.Calendar的不足。

要了解更多细节,请阅读这篇文章。

8.1. 将String转换为java.util.Date

要将String对象转换为Date对象,首先需要通过传递描述日期和时间格式的模式构建一个SimpleDateFormat对象。例如,模式可能为“MM-dd-yyyy”或“yyyy-MM-dd”。接下来,我们需要调用parse()方法并传入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. 将String转换为java.time.LocalDateTime

LocalDateTime是一个不可变的日期时间对象,表示一个时间,通常被视为年月日时分秒。

为了将String对象转换为LocalDateTime对象,可以直接使用parse()方法:

@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

例如,“2011-12-03”代表一个有效的字符串格式,其中年份有4位,月份有2位,日期有2位。

9. 总结

在这篇快速教程中,我们介绍了将String对象转换为Java支持的不同数据类型的实用方法。

本文的完整源代码和所有代码示例可在GitHub上找到。