Penukaran Rentetan Java

1. Gambaran keseluruhan

Dalam artikel ringkas ini, kami akan meneroka beberapa penukaran sederhana objek String ke pelbagai jenis data yang disokong di Java.

2. Menukar String ke int atau Integer

Sekiranya kita perlu menukar String ke jenis primitif int atau Integer wrapper, kita boleh menggunakan API parseInt () atau valueOf () untuk mendapatkan nilai pengembalian int atau Integer yang sesuai :

@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. Menukar String untuk panjang atau Long

Sekiranya kita perlu menukar String ke jenis pembungkus panjang atau panjang primitif , kita boleh menggunakan parseLong () atau valueOf () masing-masing:

@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. Menukar String untuk double atau Double

Sekiranya kita perlu menukar jenis String ke jenis primitif double atau Double wrapper, kita boleh menggunakan parseDouble () atau valueOf () masing-masing:

@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. Menukar String ke ByteArray

Untuk menukar String ke array byte, getBytes () mengekod String menjadi urutan byte menggunakan charset lalai platform, menyimpan hasilnya menjadi array byte baru.

Tingkah laku getBytes () tidak ditentukan ketika String yang dilalui tidak dapat dikodkan menggunakan charset lalai. Seperti dalam dokumentasi java, kelas java.nio.charset.CharsetEncoder harus digunakan apabila lebih banyak kawalan terhadap proses pengekodan diperlukan:

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

6. Menukar String ke CharArray

Untuk menukar String ke instance CharArray , kita hanya dapat menggunakan toCharArray () :

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

7. Menukar String ke boolean atau Boolean

Untuk menukar instance String ke jenis boolean primitif atau Boolean wrapper, kita masing-masing dapat menggunakan API parseBoolean () atau 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. Menukarkan Rentetan ke Tarikh atau TempohTarikh Tempatan

Java 6 menyediakan jenis data java.util.Date untuk mewakili tarikh. Java 8 diperkenalkan API baru untuk Tarikh dan Masa untuk menangani kelemahan yang lebih tua java.util.Date dan java.util.Calendar .

Anda boleh membaca artikel ini untuk maklumat lebih lanjut.

8.1. Menukar String ke java.util.Date

Untuk menukar objek String ke objek Date , kita perlu terlebih dahulu membina objek SimpleDateFormat dengan melewati corak yang menerangkan format tarikh dan waktu.

Sebagai contoh, nilai yang mungkin untuk corak adalah "MM-dd-yyyy" atau "yyyy-MM-dd". Seterusnya, kita perlu menggunakan kaedah parse melalui String .

The String diluluskan sebagai argumen yang seharusnya berada di dalam format yang sama seperti corak. Jika tidak, ParseException akan dilemparkan pada waktu runtime:

@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. Menukar String ke java.time.LocalDateTime

LocalDateTime adalah objek tarikh-waktu yang tidak berubah yang mewakili waktu, sering dilihat sebagai tahun-bulan-hari-jam-minit-detik.

Untuk menukar objek String ke objek LocalDateTime , kita hanya boleh menggunakan 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 mesti mewakili masa yang sah mengikut java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME. Jika tidak, ParseException akan dilemparkan pada waktu runtime.

Sebagai contoh ' 2011-12-03 ' mewakili format rentetan yang sah yang mempunyai 4 digit untuk tahun ini, 2 digit untuk bulan selama satu tahun dan 2 digit untuk hari dalam sebulan.

9. Kesimpulannya

Dalam tutorial ringkas ini, kami telah membahas kaedah utiliti yang berbeza untuk menukar objek Sing ke jenis data yang berbeza yang disokong dalam java.

Kod sumber yang lengkap dan semua coretan kod untuk artikel ini boleh didapati di GitHub.