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
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
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
ionkoto avatar ionkoto 23 Точки

Колеги написах някакво прекалено елементарно решение на 7ма задача, но всички примери ми излизат. Ако някой намери грешка ще съм ви благодарен. Ето кода: 

import java.util.Scanner;

public class MagicExchangableWords {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        String s1 = console.next();
        String s2 = console.next();
        System.out.println(areExchangeable(s1,s2));

    }

    private static boolean areExchangeable(String s1, String s2){
        for (int i = 0; i < s1.length() ; i++) {
            for (int j = i+1; j <s1.length() ; j++) {
                if ((s1.charAt(i)==s1.charAt(j)) && (s2.charAt(i)!=s2.charAt(j))){
                    return false;
                }
            }
        }
        return true;

    }
}

 

1
EyubDjelil avatar EyubDjelil 9 Точки

office_kanev ето един regex, който хваща всички.

Само, че се наложи допълнителна проверка за да извеждам само онези match.find(), които са цяла дума а не част от по-голяма дума.

package Homeworks.TextProcessing_RegexAPI;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Eyub on 6.4.2016 г..
 * Problem 6
 * Write a program that takes as input an array of strings are prints
 * only the words that start and end with capital letter.
 * Words are only strings that consist of English alphabet letters.
 * Use regex.
 */
public class StartsAndEndsWithCapitalLetter {
    public static void main(String[] args) {
        List<String[]> list = new ArrayList<>();

        String[] lineOne = {"GoshO", " blabla", "NqmaSm1saL", "KvoStaA"};
        String[] lineTwo = {"AZ", "AK", "47", "RoBoT", "noWayouT"};
        String[] lineTree = {"DrakonI", " Navsekyde"};

        list.add(lineOne);
        list.add(lineTwo);
        list.add(lineTree);

        Pattern p = Pattern.compile("([A-Z][a-zA-Z]*[A-Z])");
        for (int i = 0; i < list.size(); i++) {
            for (String s : list.get(i)) {
                Matcher matcher = p.matcher(s);

                while (matcher.find()) {
                    if (s.equals(matcher.group())) {
                        System.out.print(" "+matcher.group());
                    }
                }
            }
            System.out.println();
        }
    }
}

Надявам се да е полезна информация.

0
07/04/2016 13:07:18
kaloyannikov avatar kaloyannikov 531 Точки

Няма смисъл да имаш два цикъла по тоя начин според мен

//

for (int i = 0; i < list.size(); i++) {
     for (String s : list.get(i)) {

//

според мен e по-добре с foreach да обхождаш колекция .

for(String string : list)

0
EyubDjelil avatar EyubDjelil 9 Точки

Всъщност не си се загледал в кода внимателно kaloyannikov.

В списъка имам String[] -т.е. масиви. И във втория for обхождам индексите на масива във списъка.

0
07/04/2016 13:45:59
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.