Chuyển đổi chuỗi Java

1. Khái quát chung

Trong bài viết nhanh này, chúng ta sẽ khám phá một số chuyển đổi đơn giản của các đối tượng Chuỗi sang các kiểu dữ liệu khác nhau được hỗ trợ trong Java.

2. Chuyển đổi chuỗi thành int hoặc Integer

Nếu chúng ta cần chuyển đổi một chuỗi sang kiểu trình bao bọc int nguyên thủy hoặc Integer , chúng ta có thể sử dụng API parseInt () hoặc valueOf () để nhận giá trị trả về int hoặc Integer tương ứng :

@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. Chuyển đổi chuỗi thành dài hoặc dài

Nếu chúng ta cần phải chuyển đổi một chuỗi để nguyên thủy dài hoặc dài wrapper loại, chúng ta có thể sử dụng parseLong () hoặc valueOf () tương ứng:

@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. Chuyển đổi chuỗi thành gấp đôi hoặc gấp đôi

Nếu chúng ta cần chuyển đổi một String thành loại double hoặc Double wrapper nguyên thủy , chúng ta có thể sử dụng parseDouble () hoặc valueOf () tương ứng:

@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. Chuyển đổi chuỗi thành ByteArray

Để chuyển đổi một Chuỗi thành một mảng byte, getBytes () mã hóa Chuỗi thành một chuỗi các byte bằng cách sử dụng bộ ký tự mặc định của nền tảng, lưu trữ kết quả vào một mảng byte mới.

Hành vi của getBytes () là không xác định khi chuỗi được truyền vào không thể được mã hóa bằng cách sử dụng bộ ký tự mặc định. Theo tài liệu java, lớp java.nio.charset.CharsetEncoder nên được sử dụng khi cần kiểm soát nhiều hơn quá trình mã hóa:

@Test public void whenConvertedToByteArr_thenCorrect() { String beforeConvStr = "abc"; byte[] afterConvByteArr = new byte[] { 'a', 'b', 'c' }; assertEquals(Arrays.equals(beforeConvStr.getBytes(), afterConvByteArr), true); }

6. Chuyển đổi chuỗi thành CharArray

Để chuyển đổi một chuỗi thành một phiên bản CharArray , chúng ta chỉ cần sử dụng toCharArray () :

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

7. Chuyển đổi chuỗi thành boolean hoặc Boolean

Để chuyển đổi một cá thể String thành kiểu bao bọc boolean hoặc Boolean nguyên thủy , chúng ta có thể sử dụng các API parseBoolean () hoặc valueOf () tương ứng:

@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. Chuyển đổi chuỗi để ngày hoặc LocalDateTime

Java 6 cung cấp kiểu dữ liệu java.util.Date để biểu diễn ngày tháng. Java 8 giới thiệu các API mới cho ngàyThời gian để giải quyết những thiếu sót của già java.util.Datejava.util.Calendar .

Bạn có thể đọc bài viết này để biết thêm chi tiết.

8.1. Chuyển đổi chuỗi thành java.util.Date

Để chuyển đổi đối tượng Chuỗi thành đối tượng Ngày , trước tiên chúng ta cần xây dựng đối tượng SimpleDateFormat bằng cách chuyển mẫu mô tả định dạng ngày và giờ.

Ví dụ: giá trị có thể có cho mẫu có thể là “MM-dd-yyyy” hoặc “yyyy-MM-dd”. Tiếp theo, chúng ta cần gọi phương thức phân tích cú pháp truyền qua Chuỗi .

Các chuỗi thông qua như là một đối số phải ở trong định dạng giống như mô hình. Nếu không, một ParseException sẽ được ném vào thời gian chạy:

@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. Chuyển đổi chuỗi thành java.time.LocalDateTime

LocalDateTime là một đối tượng ngày-giờ bất biến biểu thị thời gian, thường được xem là năm-tháng-ngày-giờ-phút-giây.

Để chuyển đổi đối tượng String thành đối tượng LocalDateTime , chúng ta chỉ cần sử dụng API phân tích cú pháp :

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

Các chuỗi phải đại diện cho một thời gian hợp lệ theo java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME. Nếu không, một ParseException sẽ được ném vào thời gian chạy.

Ví dụ: ' 2011-12-03 ' thể hiện định dạng chuỗi hợp lệ có 4 chữ số cho năm, 2 chữ số cho tháng trong một năm và 2 chữ số cho ngày trong tháng.

9. Kết luận

Trong hướng dẫn nhanh này, chúng tôi đã đề cập đến các phương pháp tiện ích khác nhau để chuyển đổi các đối tượng S tring sang các kiểu dữ liệu khác nhau được hỗ trợ trong java.

Mã nguồn hoàn chỉnh và tất cả các đoạn mã cho bài viết này đều có sẵn trên GitHub.