Перейти к основному содержимому

Преобразование строк Java

· 4 мин. чтения

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 .