Не разбирам защо се получава изход от 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 игнорира празни струни в края на списъка.