Професионална програма
Loading...
+ Нов въпрос
office_kanev avatar office_kanev 6 Точки

[Homework] Text Processing and Regex API март 2016

Домашното цък .Някой да даде решение на втора задача.Давайте примери за по-оптимизирани решения .Приемам критики относно решенията ми .Дайте някой по оптимизиран регекс за '6-та задача' че аз я решавам с три оделни и стана доста тъпо решение.

0
Java Advanced 01/04/2016 13:48:02
bety_1988 avatar bety_1988 49 Точки

Здравей, колега! Ето го моето решение на 2-ра задача: http://pastebin.com/WGE5EV2L

2
office_kanev avatar office_kanev 6 Точки

Благодаря колежке,а аз сплитвам думите една по една и после се чудяк каво да ги правя.Много тарикатско решение, браво.

0
office_kanev avatar office_kanev 6 Точки

М да kaloyannikov , Gesh4o регексите  ви определено са много по-оптимизирани,благодаря. 

0
Gesh4o avatar Gesh4o Trainer 305 Точки

Здравей,

Ето това е моето решение за 6. задача:

        String inputText = scanner.nextLine();

        StringBuilder result = new StringBuilder();
        Matcher matcher = Pattern.compile("(\\b[A-Z]+([a-zA-Z]*?)[A-Z]+\\b)").matcher(inputText);
        while (matcher.find()){
            result.append(matcher.group()).append(" ");
        }

        System.out.println(result);

Поздрави! :)

3
EvgeniyaL avatar EvgeniyaL 35 Точки

Здравейте, 

Ето ги и моите решения на 2-ра: https://gist.github.com/EvgeniyaL/69d0572c9449c19a2e36c549a0708e9c и 6-та: https://gist.github.com/EvgeniyaL/f3be75fd4896fe8b34b77bbba34915b4 задачи. А да питам някой от вас направил ли е 7-ма: https://gist.github.com/EvgeniyaL/5f8ce091196a205ab54133cc078d7e17 по различен начин?

1
02/04/2016 10:28:26
ladymira avatar ladymira 5 Точки

Колеги, закъсах на първата задача, защото при въвеждането примерно на

"Please contact us at: support@github.com. "

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

Т. е. трябва да е support@github.com а не support@github.com. (последната точка трябва да я няма)

Ето го решението ми http://pastebin.com/hWYXE6pc

Ако можете да ми подскажете как да махна тази точка накрая, за да ми отговаря на output-а, който се иска в домашното

0
alex1966 avatar alex1966 255 Точки

Здравей, твоя регекс не можах да го преработя за да стане, може да ползваш този: "([a-z.-_\\d]+)@([a-z]+).([a-z]+)(\\.[a-z-]+)+"
Поздрави!

1
ladymira avatar ladymira 5 Точки

Ами пробвах го и с твоя регекс, но с него не ми намира никакви имейли.sad

Сигурно нещо друго пропускам, благодаря ти все пак.

0
alex1966 avatar alex1966 255 Точки

Разбира се че няма да намира... има "/" което е escaping само за IDE-to, като махнеш 2рите наклонени черти ще ти ги намери всички :)
([a-z.-_\d]+)@([a-z]+).([a-z]+)(\.[a-z-]+)+    
така пробвай

1
03/04/2016 15:15:31
tishkata86 avatar tishkata86 14 Точки

Ето и моето решение на втора задача Count Substring Occurrences с регекс http://pastebin.com/mkG33u3n

0
05/04/2016 10:31:37
Pafo37 avatar Pafo37 21 Точки

Колега на 6-та задача, може ли да обясниш 

if (matcher.find()) {
    if (currentElement.length() == matcher.group().length()) {
        System.out.print(matcher.group() + " ");
    }
}

тази проверка,че не ми е ясна?

0
office_kanev avatar office_kanev 6 Точки

Здравей Pafo37- понеже патърна който съм задал ,мачва освем целите които търся в него и други текстове в които същият патърн е само част от тях.За да премахна тези грешки проверявам  

if (currentElement.length() == matcher.group().length()) {

ако дължината на намереното съвпадение не отговаря на дължината на търсеният израз имам некоректно съвпадение и по този начин го елиминирам.  Ако са равни го отпечатвам    :

 System.out.print(matcher.group() + " ");

като цяло решението ми е много бозаво и тромаво понеже използвам 3-и различни регекса.Но понеже не съм хакер ако трябва да измисля регекс който да хване всичко не знам дали би ми стигнал един ден.Затова използвах съвета на г-н Богомил Димитров -вместо да губим часове да измисляме нягкакъв луд регекс може да използваме няколко  по прости които да съставим за 10 мин. И аз избрах този вариант защото наистина тези трите ги измислих в   https://regex101.com/   за няма и 10-мин. И един съвет от мен ако беше дебъгнал решението ми сега мисля че нямаше да ми зададеш този въпрос.За да разбереш нещо как работи дебъгвай иначе нищо не става вярвай ми.Аз съм онлайн обучение и никога не съм се занимавал със програмиране до сега,всичко което съм научил е от лекциите и дебъгвайки чужди кодове за да раазбера как нещата се случвам отвътре.Ако има нещо друго питай с радост бих ти отговорил стига да е в рамките на  моята  компетентност.Успех !!!!

0
alex1966 avatar alex1966 255 Точки

Като цяло регекса на 6та задача не е толкова труден само трябваше да се сетим за word boundary(\b), доколкото до начина с 3 регекса ми звучеше не наред, задова се помъчих да го мачна с 1 регекс и изглежда, че работи.

0
Pafo37 avatar Pafo37 21 Точки

Благодаря ти за обяснението!

0
IskrenPenev avatar IskrenPenev 177 Точки

Ето ги и моите решения на домашното. https://github.com/iskren-penev/JavaHomeworkStream-API-and-Regex-API-/tree/master/Java-Homework-Text-Processing-and-Regex-API/src

Учудващо лесно ми се получиха регулярните изрази, беше необходимо само да седна малко по - сериозно да ги измисля.
За задача 6 доста се чудих как да хвана последната буква от думата да бъде главна, като накрая реших да пробвам с word boundary  и взе че се получи. Това е израза, който използвах (100% homemade):

Pattern pattern = Pattern.compile("\\b[A-Z][A-Za-z]*[A-Z]\\b");

 

1
Pafo37 avatar Pafo37 21 Точки

Това са моите решенията,без 6-та задача: https://github.com/Pafo37/Text-Processing-and-Regex-API-Homework

0
PetarUzunov avatar PetarUzunov 10 Точки

Привет колега, на втора задача изпускаш събития. Трябва да въртиш for - цикъла i <= text.length()-lengthWord пъти. Знакът за равенство ти липсва.

Поздрави.

 

0
Pafo37 avatar Pafo37 21 Точки

Благодаря за забележката!

0
ionkoto avatar ionkoto 23 Точки

Ето моето решение на втора, мисля че е доста простичко.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CountSubstringOccurrences {
    public static void main(String[] args) {

        Scanner console = new Scanner(System.in);
        String text = console.nextLine().toLowerCase();
        String searchStr = console.nextLine().toLowerCase();

        int count = 0;
        int i = 0;
        
        while (text.indexOf(searchStr, i) != -1) {
            count++;
            i = text.indexOf(searchStr,i) + 1;
        }
        System.out.println(count);
    }
}

 

0
ionkoto avatar ionkoto 23 Точки

Колега ще си позволя малко критика към решението ти на първа задача. При тестване на примерите, дадени в условието, на първия и третия пример ти дава "." накрая в output-a, което не трябва да го има, както е отбелязала колежката ladymira по-горе в коментарите.

Също така, според условието, в <host> частта от e-mail-а може да има тирета между думите, а при теб регекса няма да ги хване. Например този мейл: steve.parker@soft-uni.de.  е валиден и трябва да се отпечата, но при теб не се отпечатва.

Освен това, според условието: "helloworld", ".unknown.soft.", "invalid-host-", "invalid-". са невалидни хостове, а при твоя регекс всичките минават. Абе като цяло рекегса ти е сбъркан. Не се заяждам, но мисля че това и идеята на форума, да си помагаме. Не знам защо никой преди мен не ти е обърнал внимание. 

Поздрави!

2