/ / Резултат за разделяне на Java String - java, string, split

Резултат на Java String - java, string, split

Не разбирам защо се получава изход от 3:

String[] split = "name:john;;sex:m;;".split(";");
System.out.println(Arrays.toString(split) + " size " + split.length);

Прочетох документацията на Oracle и все още не получавам защо е 3.

Защо продукцията е:

[name:john, , sex:m] size 3

Къде взима "" (вторият от списъка) и защо ""; " в края не е в изхода.

Отговори:

3 за отговор № 1

Документацията казва

Този метод работи като ако се позове на метода за разделяне на два аргумента с даден израз и ограничение на нула. Продължава празен следователно низовете не са включени в получения масив.

тук


1 за отговор № 2

split(";") ще получат низове от преди, между и след всяка точка и запетая. Така че вашият split би било теоретично {"name:john","","sex:m","",""} в даден момент от операцията. Въпреки това, split() премахва последователни празни струни, така че всъщност да получите {"name:john","","sex:m"}.

Що се отнася до причината, поради която нямате отпечатани крайни точки и запетая, е, защото разделяте всяка точка и запетая без ограничение. limit е дължината на получения масив.

Често можете да фиксирате вътрешните празни низове, като използвате правилните regex за няколко знака. Може да искате да проверите split(";++"), Ако искате крайните точки и запетаи, трябва да зададете лимит split(";++",2).


0 за отговор № 3

Изглежда като Arrays.toString представлява вашето split масив с космически знаци, вместо това, което действително ще бъде в масива от Структури, връщани от String.split, което е празният низ "", Последните две точка и запетая в края не са в изхода, защото String.split само вмъква празните низове в масива си, където определеното от вас разделител се намира в низа, а не след края му.


0 за отговор № 4

Най- "" е от двете точка и запетая, които сте поставили между тях name:john и sex:m, Фактът, че те не са в края, е защото java игнорира празни струни в края на списъка.