1. Обзор
В этой быстрой статье мы рассмотрим несколько простых преобразований объектов String
в различные типы данных, поддерживаемые в Java.
2. Преобразование String
в int
или Integer
Если нам нужно преобразовать String
в примитивный тип оболочки int
или Integer , мы можем использовать API-интерфейсы
parseInt()
или valueOf()
, чтобы получить соответствующее возвращаемое значение 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. Преобразование строки
в длинную
или длинную
Если нам нужно преобразовать 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
в примитивную двойную
или двойную
обертку, мы можем использовать 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. Преобразование строки
в массив байтов
Чтобы преобразовать строку
в массив байтов, getBytes()
кодирует строку
в последовательность байтов, используя набор символов платформы по умолчанию, сохраняя результат в новый массив байтов.
Поведение 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. Преобразование строки
в 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
в примитивный логический
или логический
тип оболочки, мы можем использовать API 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. Преобразование строки
в дату
или LocalDateTime
Java 6 предоставляет тип данных java.util.Date
для представления дат. В Java 8 представлены новые API для даты
и времени
, чтобы устранить недостатки старых java.util.Date
и java.util.Calendar
.
Вы можете прочитать эту статью для более подробной информации.
8.1. Преобразование строки
в java.util.Date
Чтобы преобразовать объекты String
в объекты Date
, нам нужно сначала создать объект SimpleDateFormat
, передав шаблон, описывающий формат даты и времени.
Например, возможное значение шаблона может быть «ММ-дд-гггг» или «гггг-ММ-дд». Далее нам нужно вызвать метод синтаксического анализа
, передав 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. Преобразование строки
в java.time.LocalDateTime
LocalDateTime
— это неизменяемый объект даты и времени, представляющий время, которое часто рассматривается как год-месяц-день-час-минута-секунда.
Чтобы преобразовать объекты String в объекты LocalDateTime
, мы можем просто использовать 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);
}
Строка должна представлять действительное время в соответствии с java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME
. В противном случае во время выполнения будет выброшено исключение ParseException .
``
Например, ' 2011-12-03
' представляет допустимый строковый формат, содержащий 4 цифры года, 2 цифры месяца года и 2 цифры дня месяца .
9. Заключение
В этом кратком руководстве мы рассмотрели различные служебные методы для преобразования объектов String
в различные типы данных, поддерживаемые в java.
Полный исходный код и все фрагменты кода для этой статьи доступны на GitHub .