[Homework] Java Basics - Collections - September 2014
Здравейте,
ето моите решения на задачите /без 13-та задача/ от домашното - Java Collections Basics:
Homework - Java Collections Basics
Всякакви коментари и препоръки са добре дошли
Здравейте,
ето моите решения на задачите /без 13-та задача/ от домашното - Java Collections Basics:
Всякакви коментари и препоръки са добре дошли
Чудесно си се справил, колега! Много добър стил на писане имаш със създаването на методи. Довечера и аз ще пусна моите решения на задачите.
Ето и моите решения на задачит от домашното. особено интересна ми се стори последната задача :)
Тези regex-и са доста пипкави... На 8-ма задача мисля, че твоя regex не хваща всички възможни email-и.
За user частта в условието е указано, че винаги трябва да започва с буква или цифра и отделните думи може да се отделят с [ ._- ] (точка, долно тире и тире). Съответно няма ограничение на символите за user частта.
За host частта е указано, че се състои от поне 2 думи, разделени с [.] (тока). Няма ограничение обаче на броя думи, разделени с точка.
Примери, които не ти ги хваща:
nikola_nikola@nikola.nikola.nikolov.abv.bg
Моят regex, който също може и да има пропуски е:
([a-zA-Z0-9]+[._-]*)+[@]([a-zA-Z0-9-]+[.]+)+([a-zA-Z0-9])+
Прав си, наистина regex-а ми не хващаша всички възможности. Сега вече мисля, че го оправих донякъде:
([a-zA-Z0-9]+[.,-_]?[a-zA-Z0-9]+)+[@]{1}([a-zA-Z0-9]+[.-]?[a-zA-Z0-9]+)+[.]{1}[a-zA-Z0-9]+
Освен това, имай предвид, че в кода ми преди да match-вам каквото и да е, първо премахвам последния char от последната дума, защото в примерите от условието, текстовете винаги завършват с точка, а имейл не може да завършва с точка. ^^
И аз си мислех да премахвам последния символ, но се оказа, че е ненужно. Моят regex така го конструирах, че никога да не хваща самотната точка в края на изречението.
Сега пробвах новия ти regex и не хваща следния пример:
soft.uni@softuni-bulgaria.co.uk
хваща го до
soft.uni@softuni-bulgaria.co
Четейки условието на задачата си мисля, че трябва да може да хващаме неограничен брой думи след @, т.е. трябва да може да хване и:
soft.uni@softuni-bulgaria.co.uk.com.com.com.com.com.com.com.com.com.com
Условието на 10 задача-"Extract All Unique Words"- е объркано.Примерът,който е даден от долу е грешен:
Input: Welcome to SoftUni. Welcome to Java. -> Output: java to softuni welcome
Верният отговор е : -> Output: java softuni to welcome
Ето и моите решения,но не са всички задачи.Java-Colections-Basic-Homework.
Тъкмо това щях да пиша и аз, но виждам, че някой вече ме е изпреварил :)
2 задача не работи, ако й подадеш стринг с "несортирани" думи, например: hi yes yes bye yes.
Тогава извежда:
hi
yes yes
bye
yes
То това и е идеята на задачата, да търсиш последователни повтарящи се думи; това че имаме редове, в които има повторение на думи, не прави задачата неработеща.
Точно така - то си го пише в условието:
sequences of equal elements
Здравейте,
Заиграх се с 2ра задача от последното домашно и написах някакъв смешен код, който не мога да счупя с какъвто и инпут да пробвам, а не мисля, че трябва да работи. Бихте ли я погледнали и ако можете я счупете и ми кажете къде ми е грешката. :D
Издържана ми се струва логиката, това, че е кратко решението не значи, че не е вярно. Не съм опитал да я счупя, но гледайки кода мисля, че е ОК.
https://github.com/d0ntth1nc/SoftUny-HW/tree/master/Collections-Basics-HomeWork/src
... и моите домашни...
Мен ме затруднява малко multithreading-а в java и не успявам да го накарам WebCrawler-a да обхожда ликновете в отделни нишки. Всъщност успявам, но нямам представа как да извеждам информация от тях или как да ги контролирам. В C# е елементарно ^_^
Колеги, на 5 и 6 задача, всичко е точно, само на последния тест, когато string-a е по- голям от 1 ред ми хваща само 1вия ред. Можете ли да ми предложите някакъв по- лесен начин от моя КОД . Работи, но е нужно допълнителен Еnter за да върне празен ред в while цикъла и да изкара резултата, а това ме дразни :D :D :D
Здравей,
в условието е казано, че на първи ред е даден текстът. Тоест целият текст ти е на един ред, без да минаваш на следващ(без "Enter"). Пробвай да си го копираш някъде (празен документ, например), форматираш -> копираш -> поставяш-> компилираш :)
Мдаа явно така ще стане :D Благодаря !
Относно задачата с email-ите. Tози regex го мъдрих 1 час. Във всички варианти , които тествах работи.
За целите на примерите е повече от добър, дори в много по-опростен вариант ще работи. Но просто за идеята
\b[a-z0-9][a-z0-9-_\.]+\w+@[a-z\.-]*\.[a-z]{2,3} -> (вариант за regexr.com)
\\b[a-z0-9][a-z0-9-_\\.]+\\w+@[a-z\\.-]*\\.[a-z]{2,3} -> директно в кода с ескейпинга
\b[a-z0-9] -> задължително да започва със малкa буква или цифра
nikola_nikola@nikola.nikola.nikolov.abv.bg
local частта example@host.com от имейла е case sensitive по принцип, не не съм виждал някой да ползва големи букви, дори много email сървъри не поддържат upperCase и го конвертират в lowerCase.
[a-z0-9-_\.]+ -> следвано от малки букви и/или цифри, тире, долна черта и точка(която сме ескейпнали с "\"), по 1 или повече на брой
nikola_nikola@nikola.nikola.nikolov.abv.bg
\w+ -> задължително да завършва с character (включва alphanumerical и underscore) - така ще избегнем това nakov_-
@ -> да е следвано от кльомба
domain частта example@host.com е винаги caseInsesitive т.е. неможе да имаме големи букви, освен ако не е някаква правописна грешка. И ако въведем @ServEr.coM -> автоматично става @server.com
[a-z\.-]* -> да е следванo от малки букви и/или точка 0 или повече на брой
nikola_nikola@nikola.nikola.nikolov.abv.bg
\.[a-z]{2,3} -> да следва точка, следвана от 2 или 3 букви (примерно .com .bg)
nikola_nikola@nikola.nikola.nikolov.abv.bg
Единственото, което забелязах и не знам как се прави е да се селектира само, ако има по 1 точка,
опитах с [\.?] също и със [\.]{1}, но не става.
j.hopkin . . 64545@york.ac . . . . ud
Не претендирам, че в реалността има такъв имейл, целта ми е просто да си тренирам regex-a
"Единственото, което забелязах и не знам как се прави е да се селектира само, ако има по 1 точка, опитах с [\.?] също и със [\.]{1}, но не става."
Може ли да обясниш по-подробно какво искаш да направиш точно, за да те насоча?
Как да включа в условието на regex-a нещо което искам да се среща само 1 път като последователност, но 0 или повече пъти като цяло? Например
да не го хвана, но
това да.
Благодаря!
Това върши работа, но трябва да си го модифицираш според твоите нужди:
\b[a-zA-Z]+(\.?[a-zA-Z]+)+@([a-zA-Z]+\.)+[a-zA-Z]+\b
Тук предполагам, че точките отляво са незадължителни, а отдясно трябва да има поне една. Както казах, за да е верен един регекс, трябва много ясно да се знае по какви правила трябва да е изграден стринга, така че това, което ти копирах не е пълно.