Java String Conversions – Java字符串转换

最后修改: 2016年 11月 16日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

In this quick article, we’ll explore some simple conversions of String objects to different data types supported in Java.

在这篇快速文章中,我们将探讨String对象到Java中支持的不同数据类型的一些简单转换。

2. Converting String to int or Integer

2.将字符串转换为intInteger

If we need to convert a String to primitive int or Integer wrapper type, we can use either the parseInt() or valueOf() APIs to get the corresponding int or Integer return value:

如果我们需要将String转换为原始的intInteger封装类型,我们可以使用parseInt()valueOf() API来获取相应的intInteger返回值。

@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. Converting String to long or Long

3.将String转换为longLong

If we need to convert a String to primitive long or Long wrapper type, we can use parseLong() or valueOf() respectively:

如果我们需要将一个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. Converting String to double or Double

4.将String转换为doubleDouble

If we need to convert a String to primitive double or Double wrapper type, we can use parseDouble() or valueOf() respectively:

如果我们需要将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. Converting String to ByteArray

5.将字符串转换为ByteArray

In order to convert a String to a byte array, getBytes() encodes the String into a sequence of bytes using the platform’s default charset, storing the result into a new byte array.

为了将字符串转换为字节数组,getBytes()使用平台的默认字符集将字符串编码为一串字节,将结果存储到一个新的字节数组。

The behavior of getBytes() is unspecified when the passed String cannot be encoded using the default charset. As per the java documentation, the java.nio.charset.CharsetEncoder class should be used when more control over the encoding process is required:

当传递的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. Converting String to CharArray

6.将String转换为CharArray

In order to convert a String to a CharArray instance, we can simply use toCharArray():

为了将一个字符串转换为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. Converting String to boolean or Boolean

7.将字符串转换为booleanBoolean

To convert a String instance to primitive boolean or Boolean wrapper type, we can use parseBoolean() or valueOf() APIs respectively:

要将String实例转换为原始的booleanBoolean封装类型,我们可以分别使用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. Converting String to Date or LocalDateTime

8.将字符串转换为日期LocalDateTime

Java 6 provides the java.util.Date datatype for representing dates. Java 8 introduced new APIs for Date and Time to address the shortcomings of the older java.util.Date and java.util.Calendar.

Java 6提供了用于表示日期的java.util.Date数据类型。Java 8为DateTime引入了新的API,以解决旧的java.util.Datejava.util.Calendar的不足之处。

You can read this article for more details.

你可以阅读这篇文章以了解更多细节。

8.1. Converting String to java.util.Date

8.1.将字符串转换为java.util.Date

In order to convert String objects to Date objects, we need to first construct a SimpleDateFormat object by passing the pattern describing the date and time format.

为了将String对象转换为Date对象,我们需要首先通过传递描述日期和时间格式的模式来构造一个SimpleDateFormat对象。

For example, a possible value for pattern could be “MM-dd-yyyy” or “yyyy-MM-dd”. Next, we need to invoke parse method passing the String.

例如,模式的可能值是 “MM-dd-yyy “或 “yyyy-MM-dd”。接下来,我们需要调用parse方法,传递String

The String passed as an argument should be in the same format as the pattern. Otherwise, a ParseException will be thrown at runtime:

作为参数传递的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. Converting String to java.time.LocalDateTime

8.2.将字符串转换为java.time.LocalDateTime

LocalDateTime is an immutable date-time object that represents a time, often viewed as year-month-day-hour-minute-second.

LocalDateTime是一个不可变的日期时间对象,代表一个时间,通常被看作是年-月-日-小时-分-秒。

In order to convert String objects to LocalDateTime objects, we can simply use the parse API:

为了将字符串对象转换为LocalDateTime对象,我们可以简单地使用parse API。

@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);
}

The String must represent a valid time according to java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME. Otherwise, a ParseException will be thrown at runtime.

String必须根据java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME代表有效的时间。否则,将在运行时抛出一个ParseException

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.

例如’2011-12-03‘代表一个有效的字符串格式,其中4位数字为年,2位数字为月,2位数字为月的一天

9. Conclusion

9.结论

In this quick tutorial, we have covered different utility methods for converting String objects to different data types supported in java.

在这个快速教程中,我们已经涵盖了将String对象转换为java中支持的不同数据类型的不同实用方法。

The complete source code and all code snippets for this article are available over on GitHub.

本文的完整源代码和所有代码片段都可以在GitHub上找到