Ответы пользователя по тегу Java
  • Редактирование текста. Как из массива ссылок вырезать нужные фрагменты?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вам просто нужно выполнить поиск и замену по строке или регулярному выражению.
    Можно обойтись и без ЯП используя только редактор текста Sublime Text или Notepad++.
    Например, в sublime text нажмите на ctrl + h
    в искомое поле введите
    https://www.facebook.com/profile.php?id=
    поле для замены оставьте пустым и нажмите на Replace All.

    Если же цель заключается именно в использовании ЯП, то в Java можно воспользоваться методом replaceAll()
    Так как у вас массив строк, то циклом пройдитесь по массиву и для каждого элемента массива выполните:
    .replaceAll("https://www.facebook.com/profile.php?id=","");
    Ответ написан
  • 3 вопроса по работе с json в java, как решить данную задачу?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    если вы заметили список стран в ListView выходят по порядку как написано а Json file так вот, как сделать так чтобы показывал по алфавиту от А до Я ?

    После десериализации данных, отсортируйте данные

    когда я выбираю из список какую нибудь страну то мне в Editext (TextInputLayout) возвращает весь объект, а мне нужен вывести только названия выбранного страну

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

    как мне получить страну автоматический в поля Выбор стран, когда пользователь вводит код страну в поля где вводится Код страна и наоборот !?

    Если я вас правильно понимаю, то вы имеете ввиду fuzzy search. Т.е. сквозной поиск.
    Ответ написан
  • Почему не удается подключиться к удаленной базе данных через Spring Boot JPA?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер!
    No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

    А так пробовали?
    jdbc:mysql://remoteHost:3306/bdname?autoReconnect=true&useSSL=false

    https://stackoverflow.com/questions/67899129/postf...
    А вот, что говорят:
    As far as I am concerned, the cause of the issue is that OpenJdk requires TLSv1.2 or TLSv1.3, starting from version 11.0.11. Update: The change will apply to at least OpenJDK 8u292 onward, OpenJDK 11.0.11 onward, and all versions of OpenJDK 16, following the JRE and JDK Crypto Roadmap published by Oracle
    Ответ написан
    1 комментарий
  • Данные о другом пользователе через instagram api?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    То есть не существует никакого официального способа получить ленту другого пользователя?

    Подозреваю, что да. И как вам уже подсказали вам необходимо спарсить ленту. Например, при помощи selenium. Или же как вариант изучить внутренний АПИ, выполнить запрос и спарсить json, в котором будут необходимые данные.
    Ответ написан
    Комментировать
  • Как сделать аутентификацию без использования html формы?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Хочу сделать аутентификацию, чтобы запрос приходил с фронта(я делаю только бэк).

    По сути вы пишете REST сервис, а соответственно, вам нужно добавить аутентификацию с использованием jwt.
    Вот, пример приложения - https://github.com/hantsy/spring-webmvc-jwt-sample
    Прочитать можно тут:
    https://www.bezkoder.com/spring-boot-security-post...
    Ответ написан
    Комментировать
  • Почему не присваивается связь many to many?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Проблема вот, тут:

    public boolean saveUser(UserDto userDto) {
            User user = userRepository.findByUsername(userDto.getUsername());
            if (user != null) {
                return false;
            }
    
            user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
            user.setUsername(userDto.getUsername());
            user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
            userRepository.save(user);
    
            return true;
        }


    Попробуйте так:
    public boolean saveUser(UserDto userDto) {
            User userFromDB = userRepository.findByUsername(userDto.getUsername());
            if (userFromDB != null) {
                return false;
            }
            User user = new User();
            user.setUsername(userDto.getUsername());
            user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
            user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
            userRepository.save(user);
    
            return true;
        }


    Подробнее про ManyToMany
    https://vladmihalcea.com/the-best-way-to-use-the-m...

    У вас даже в idea подсвечивается потенциальная проблема
    61937f32c8b2f268382727.png
    Ответ написан
  • Как оптимально перебрать все возможные комбинации 4х массивов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Не знаю, будет ли это полезно вам, но библиотека действительно есть (Apache Commons Math):
    CombinatoricsUtils.combinationsIterator()
    https://commons.apache.org/proper/commons-math/jav...
    Ответ написан
    Комментировать
  • Main не видит другие классы. Что добавить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну во-первых, зачем вызывать статичный метод sendMsg() через экземпляр класса Jsoner? Вы можете обратиться к методу напрямую через Jsoner.sendMsg()
    Во-вторых,
    location: package неважно
    Важно. Так как название пакета должно соответствовать naming convention. Рекомендую открыть этот проект в Intellij IDEA и скорее всего она будет ругаться. Вполне возможно, что в названии директории есть недопустимые символы (например, тире или дефис).
    В-третьих,
    java -cp "$(printf %s: lib/*.jar)" ./src/неважно/Main.java

    Вот, ответ на ваш вопрос - https://stackoverflow.com/questions/219585/includi...
    Ответ написан
  • Какие лучшие курсы java 2021?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Скажу так: курсы нужны не для того, чтобы получать новые знания, а для того, чтобы более опытный разработчик мог указать вам на ваши ошибки. Также курсы полезны тем, что когда вы изучаете сами, то это может быть не систематично, другое дело, если вам приходится 2-3 раза в неделю посещать курсы (онлайн или оффлайн - не важно).
    Соответственно, можно даже не проходить курсы, а найти ментора (есть даже платные услуги менторов). За основу берите:
    1) учебники
    2) полезные статьи на habr, baeldung, medium и др
    3) туториалы на youtube, udemy, coursera и т.д. ( не бросайтесь тапками =) ). Это помогает быстро освоить что-либо, увидеть в работе фреймворк или еще что, но для получения академических знаний (см. пункт 1)
    Ответ написан
  • Консольная игра в Кости, как реализовать возможность выбора между выходом из игры и ее продолжением?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Внутри метода создается цикл while(), внутри которого слушаете ввод (Scanner) и если была введена нужная команда, то делаете System.exit(n)
    Ну и не забывайте обработать исключения, чтобы например, приложение не выходило на неправильной или несуществующей команде
    Ответ написан
  • Как подсчитать письма с помощью Selenium/Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну ответ на ваш вопрос может сильно отличаться от почтового провайдера к почтовому провайдеру, ибо у них разный DOM и соответственно, будут нужны разные селекторы (xpath).
    Если простыми словами, то:
    - открыть браузер (можно в headless режиме)
    - найти узел, в котором представлен список писем
    - выбрать этот узел. В Selenium есть такой класс, как WebElement. Так как элементов несколько, то используйте List<WebElement>.
    - Так как у нас есть List вызываем метод size() и получаем кол-во элементов помещенных в список.

    И как правильно отметил коллега rst надо заставить подождать загрузки страницы. Прочитайте про Explicit & Implicit Waits
    Ответ написан
    Комментировать
  • Как сделать код в стиле MVC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    public class Knight {
        private Ammunition[] ammunition;

    Наверное, вместо массива есть смысл использовать что-нибудь из jcf. Например, List.

    Что такое MVC - model, view, controller

    Controller
    Создайте несколько контроллеров. Например. MenuController, внутри которого будут методы выводящие меню и другие методы для работы с меню

    throw new UnsupportedOperationException("You need to implement this method");

    Если вы хотите, чтобы пользователь имплементировал данный метод, то вместо выбрасывания исключения можно использовать абстрактный класс, а тело метода оставить пустым. Ну или же использовать интерфейс.

    Model
    В данном случае у вас есть необходимые модели (сущности). Например, Knight, Ammunition

    View
    Ну тут уже можно например, для красоты подключить либу AsciiTable и выводить элементы меню в виде красивой таблицы или например, добавить прогресс бар в консольное приложение и т.д.
    Ответ написан
    3 комментария
  • Что нужно изучить чтобы писать красивые приложения под Android?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    что нужно изучить чтобы писать красивые UI-приложения?

    Ну с учетом того, что художник пишет свои картины, то вам нужно изучить UX/UI дизайн.

    Но если все-таки желаете разрабатывать приложения для Android, то начать изучение стоит с Kotlin / Java. А затем прочитать про Gradle. Потом познакомиться с Android. А вопрос насчет UI оставить дизайнеру. Пускай, у него голова болит, как надо красиво нарисовать кнопочки, ибо ваше дело разработка))
    Ответ написан
    Комментировать
  • Как правильно отпарсить веб-страницу через Jsoup?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как и отметил коллега Сергей Горностаев контент данной страницы формируется динамически. Соответственно, jsoup не подойдет.
    Вам необходимо выполнить GET запрос на урл REST сервиса и получить json, который потом необходимо будет распарсить.
    Откройте консоль браузера и перейдите на вкладку "Сеть". В фильтрах выберите XHR и изучите запросы.
    Увидете вот, такой урл:
    https://www.stoloto.ru/p/api/mobile/api/v34/service/draws/archive?count=10&game=keno2

    А в ответ прибегает json с веткой draws.

    При помощи либы или онлайн сервиса json2pojo создайте pojo и используя (gson, DomParser или jackson) спарсите этот json.

    jsoup тут не нужен.
    Можно еще спарсить страницу при помощи selenium (управляя браузером), но как по мне это плохое решение.
    Ответ написан
    Комментировать
  • Что лучше выучить, Java или C#?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Язык является инструментом. Важны ваши навыки, как разработчика (алгоритмы, структуры данных, понимание tcp/ip и т.д.)
    Что касается выбора языка, то ориентируйтесь на:
    - что вы собираетесь на нем делать и кем планируете работать. Если например, речь о геймдеве, то конечно же C# (Unity) или C++. И тут Java ну никак... хоть и позволяет писать игры. Если enterprise, то да, тут уже можно выбирать между Java & C#.
    - ориентируйтесь на то, где вы планируете работать. Возможно, что вы в результате вашего исследования поймете, что Java популярнее C# (или наоборот), но на деле окажется, что в вашей стране/городе она вовсе не популярна. Соответственно, посмотрите какие компании есть у вас в городе (если планируете работать офлайн) и изучите их стек.
    Ну и конечно же пробуйте. Я например, пока дошел до Java, успел попробовать PHP & JavaScript. В любом случае, когда вы станете востребованным и опытным специалистом, то уже будете владеть несоклькими языками.
    Ответ написан
    Комментировать
  • Почему у строк всегда одиноковый hashcode()?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, ответ на ваш вопрос:
    https://www.baeldung.com/java-string-immutable
    Why_String_Is_Immutable_In_Java.jpg
    Ответ написан
  • В массиве слов найти слово состоящее только из цифр. Если таких слов несколько, найти второе из них?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В массиве слов найти слова состоящие только из цифр.

    Вот, одно из возможных решений задачи:
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            String[] words = new String[]{"qqqqqqqqqqwe", "qwer", "123", "4321"};
            char a = 'a';
            StringProcessor stringProcessor = new StringProcessor();
            List<String> wordsContainingOnlyDigits = stringProcessor.findWordsContainingDigits(words);
            wordsContainingOnlyDigits.forEach(System.out::println);
        }
    
    }
    
    class StringProcessor {
    
        /**
         * Метод находит слова, которые состоят только из цифр
         * @param words массив слов
         * @return список слов, состоящих из цифр
         */
        public List<String> findWordsContainingDigits(String[] words) {
            List<String> wordsContainingOnlyDigits = new ArrayList<>();
            // Итерируем по массиву слов
            for (String word : words) {
                // получаем массив символов из слова
                char[] wordChars = word.toCharArray();
                // Boolean[] isDigits = new Boolean[wordChars.length];
                boolean[] isDigits = new boolean[wordChars.length];
                // итерируем по массиву символов
                for (int i = 0; i < wordChars.length; i++) {
                    char currentChar = wordChars[i];
                    // проверяем является ли символ цифрой
                    if (Character.isDigit(currentChar)) {
                        isDigits[i] = true;
                    } else {
                        // если нет, то проверяем следующее слово
                        break;
                    }
                }
                // если все значения isDigits true, то значит слово состоит из цифр
                if (areAllTrue(isDigits)) {
                    // добавляем слово в список
                    wordsContainingOnlyDigits.add(word);
                }
            }
            return wordsContainingOnlyDigits;
        }
    
        /**
         * Метод проверяет boolean массив на истинность
         * @param array boolean массив
         * @return boolean
         */
        private static boolean areAllTrue(boolean[] array)
        {
            for(boolean b : array) if(!b) return false;
            return true;
        }
    }


    Если таких слов несколько, найти второе из них?

    Не совсем понятно, что является "вторым из них".

    Что касается вашего кода, то:
    зачем конвертировать строку в строку и затем доставать массив символов
    char[] chars = String.valueOf(element).toCharArray();

    можно же:
    char[] chars = element.toCharArray();

    тут итерция неверная:
    for (int i = 0; i < chars.length - 1; i++) {
    либо так: i < chars.length; либо так: i <= chars.length - 1;

    для проверки является ли символ цифрой есть метод Character.isDigit()
    Ответ написан
    5 комментариев
  • Можно ли сделать динамическое добавление WebAPI?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Не знаю поможет ли вам это, но нужный вам функционал есть в составе Spring Cloud.
    Вам нужно следующее:
    - Spring Configuration Server, который стартует первым и подгружает конфигурации для других микросервисов.
    - (Разумеется, что вам также понадобятся Eureka Server & Spring Gateway API)
    - Далее вам необходимо добавить Spring Cloud Bus, который динамически обновляет конфиги.
    Потом происходит примерно следующее:
    Вы заливаете ваши новые конфиги либо в гит репозиторий, либо локально. При наличии новой конфигурации они доставляются через AMQР к соответствующему микросервису.
    KHtD0FG.png
    Ответ написан
    Комментировать
  • CRUD spring+hibernate: передача json и обработка на сервере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    По-первых, для реализации вашей задачи вам необходимо обратить внимание на паттерно DTO (data to object).
    Также, если у вас приложение на Spring, то можете подключить мапперы для удобства маппинга (конвертации) dto -> entity (и наоборот). Можете использовать такие либы, как modelMapper, MapStruct.
    Если не хотите использовать либу, то имплементируйте интерфейс Converter<S,T>

    Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются

    Вы можете на клиентской стороне средствами js проверить поля объекта на null и в случае оного просто не передавать это поле. Ну или же можно передать это поле и проверить на null & empty уже на серверной стороне.

    В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)

    Чтобы передать id животного/ных из фронта необходимо, чтобы они были в БД. Если животные добавляются раньше пользователя, то достаточно при получении dto для user (в утильном классе Converter) найти животных по переданным id и назанчить этих животных юзеру через setPets()или метод addPet()
    Ответ написан
    Комментировать
  • Как собрать с помощью maven ТОЛЬКО тесты?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Первое. что попадается на глаза - <pluginManagement>. Ваши плагины внутри этого тега. Этот тег позволяет управлять указанными плагинами внутри модулей, но если вы хотите, чтобы они были применены к текущему проекту, то вытащите плагины из этого плагина.
    В конфигах плагина maven-assembly-plugin пропишите это и укажите ваш класс
    <archive>
            <manifest>
              <mainClass>com.example.Main</mainClass>
            </manifest>
          </archive>


    А вообще, если хотите настроить fat jar, то лучше использовать - maven shade plugin
    https://stackoverflow.com/questions/16222748/build...
    Ответ написан