logo

Kuinka muuntaa tavutaulukko merkkijonoksi Javassa

Tavutaulukon muuntamista merkkijonoksi kutsutaan dekoodaukseksi. Tämä prosessi vaatii Charsetin. Meidän pitäisi kuitenkin käyttää merkkisarjaa dekoodaus tavutaulukko.

On kaksi tapaa muuntaa tavutaulukko merkkijonoksi:

  • Käyttämällä Merkkijonoluokan rakentaja
  • Käyttämällä UTF-8-koodaus

Käyttämällä String Class Constructoria

Yksinkertaisin tapa muuntaa tavutaulukko Stringiksi, voimme käyttää String-luokan konstruktoria, jonka konstruktoriargumenttina on byte[].

 String str=new String(bytes); 

Esimerkki

Seuraava esimerkki ei käytä mitään merkkikoodausta.

 public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } } 

Lähtö:

Kuinka muuntaa tavutaulukko merkkijonoksi Javassa

Käyttämällä UTF-8-koodausta

Muista merkkikoodaus, kun muunnat tavutaulukon merkkijonoksi. Koska tavut ovat binääritietoja, kun taas merkkijono on merkkitietoja. On tärkeää tietää sen tekstin alkuperäinen koodaus, josta tavutaulukko on luotu. Kun käytämme eri merkkikoodausta, emme saa alkuperäistä merkkijonoa takaisin.

Oletetaan, että meidän on luettava tavutaulukko tiedostosta, joka on koodattu ' ISO_8859_1 '. Meillä ei ole merkkikoodausta, kun muunnamme tavutaulukon merkkijonoksi. Muunnamme tavutaulukon Stringiksi käyttämällä String-luokan konstruktoria, mutta se ei takaa, että saamme saman tekstin takaisin. Tämä johtuu siitä, että String-luokan rakentaja käyttää alustan oletuskoodausta.

Bytes sisältää 8 bittiä, joilla voi olla jopa 256 erillistä arvoa. Se toimii ASCII-merkistössä, jossa käytetään vain seitsemää bittiä. Jos merkistöissä on enemmän kuin 256 arvoa, meidän tulee erikseen määrittää koodaus, joka kertoo kuinka merkit koodataan tavujonoksi.

Java-alustan tukemat merkit ovat seuraavat:

  • StandardCharsets.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

Kun emme muista tarkkaa koodausta, tällaisissa tapauksissa alustamme ei pysty muuttamaan näitä erikoismerkkejä oikein. Tämä ongelma ratkaistaan ​​tarjoamalla UTF-8 ' merkkikoodauksena. Java tarjoaa toisen ylikuormitetun rakentajan String-luokassa, joka hyväksyy merkkikoodauksen.

 new String(byte[], 'character encoding'); 

Esimerkki

Seuraavassa esimerkissä olemme käyttäneet StandardCharset.UTF_8 määrittääksesi koodauksen.

 import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } } 

Lähtö:

Kuinka muuntaa tavutaulukko merkkijonoksi Javassa

Esimerkki

Seuraavassa esimerkissä olemme ottaneet charin luodessasi tavutaulukkoa. Se toimii autoboxingin takia. Merkki 'T' muunnetaan 84:ksi tavutaulukossa ja niin edelleen. Siksi molempien tavutaulukoiden tulos on sama.

 public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } } 

Lähtö:

Kuinka muuntaa tavutaulukko merkkijonoksi Javassa

String-luokassa on myös konstruktori, jossa voimme välittää argumenttina tavutaulukon ja Charsetin. Joten seuraavaa lausetta voidaan käyttää myös tavutaulukon muuntamiseen Stringiksi Javassa.

 String str = new String(byteArray, StandardCharsets.UTF_8) 

String-luokassa on myös konstruktori, joka muuntaa tavutaulukon osajoukon merkkijonoksi.

 String(byte[] bytes, int offset, int length, String charsetName) 

Katsotaanpa toinen esimerkki, jossa käytetään erilaista koodausta.

Esimerkki

 import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } } 

Lähtö:

Kuinka muuntaa tavutaulukko merkkijonoksi Javassa