Преобразуване на низ в поток от символи

1. Общ преглед

Java 8 представи Stream API с функционални операции за обработка на последователности. Ако искате да прочетете повече за това, погледнете тази статия.

В тази бърза статия ще видим как да преобразуваме низ в поток от единични знаци.

2. Преобразуване с помощта на символи ()

В String API има нов метод - символа () -, с които може да се получи например от S TREAM от String обект. Този прост API връща екземпляр на Int Stream от входния низ .

Най-просто казано, IntStream съдържа цяло число представяне на символите от обекта String :

String testString = "String"; IntStream intStream = testString.chars();

Възможно е да се работи с цялостно представяне на символите, без да се конвертира в техния символен еквивалент. Това може да доведе до някои незначителни печалби в производителността, тъй като няма да е необходимо всяко цяло число да се поставя в обект на символ .

Ако обаче трябва да показваме символите за четене, трябва да преобразуваме целите числа в удобната за човека форма на символа :

Stream characterStream = testString.chars() .mapToObj(c -> (char) c);

3. Преобразуване с използване на codePoints ()

Като алтернатива можем да използваме метода codePoints () , за да получим екземпляр на IntStream от низ. Предимството на използването на този API е, че допълнителните символи на Unicode могат да бъдат обработвани ефективно.

Допълнителните символи са представени от сурогатни двойки Unicode и ще бъдат обединени в една кодова точка. По този начин можем правилно да обработим (и покажем) всеки символ на Unicode:

IntStream intStream1 = testString.codePoints();

Трябва да картографираме върнатия IntStream към Stream, за да го покажем на потребителите:

Stream characterStream2 = testString.codePoints().mapToObj(c -> (char) c); 

4. Преобразуване в поток от единични символни низове

Досега успяхме да получим поток от герои; какво, ако вместо това искаме поток от единични символни низове ?

Точно както е посочено по-рано в статията, ще използваме методите codePoints () или chars () , за да получим екземпляр на IntStream , който вече можем да картографираме в Stream .

Процесът на картографиране включва първо преобразуване на целочислените стойности в съответните им символни еквиваленти.

След това можем да използваме String.valueOf () или Character.toString (), за да преобразуваме символите в обект String :

Stream stringStream = testString.codePoints() .mapToObj(c -> String.valueOf((char) c));

5. Заключение

В този бърз урок се научаваме да получаваме поток от символи от обект String чрез извикване на методите codePoints () или chars () .

Това ни позволява да се възползваме напълно от Stream API - за удобно и ефективно манипулиране на символи.

Както винаги, кодови фрагменти могат да бъдат намерени в GitHub.