1. 概述
在这篇简短的文章中,我们将探讨如何将String
对象转换为Java支持的不同数据类型。
2. 将String
转换为int
或Integer
若需要将String
转换为基本类型int
或Integer
包装类,我们可以使用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
转换为long
或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. 将String
转换为double
或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. 将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
转换为boolean
或Boolean
要将String
实例转换为基本类型boolean
或Boolean
包装类,可以使用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
转换为Date
或LocalDateTime
Java 6提供了java.util.Date
类型来表示日期。Java 8引入了新的日期和时间API以解决旧的java.util.Date
和java.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上找到。