Ответы пользователя по тегу Java
  • Проверить встречается ли строка больше одного раза?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день. Давным-давно писал аналогичный учебный проект про приобретению билета для кино.
    Правда, я тогда уже использовал Hibernate + MySQL.
    Вот, тут можно глянуть исходники - https://github.com/hasanli-orkhan/learn-java/tree/...

    Скажу, что ваш код реализован некорректно.
    Во-первых, Java это ООП язык и соответственно, вам нужно использовать всю мощь ООП. Например, создайте pojo Ticket, у каждого билета своя стоимость, а также булево значение isPurchased и т.д. В общем, гляньте на исходник моего проекта станет ясно.

    Такой вариант плох тем, что во-первых это скорее процедурный подход, нежели ООП. Во-вторых, представьте, что у вас завтра изменится стоимость билетов и вам нужно править код в нескольких местах. А завтра заказчик скажет, что валюта не в долларах, а в рублях и вам придется заново править код и т.д.
    так не должно быть
    public static void ticketPrice(int rows, int seats, int checkRow) {
            System.out.println();
            if (rows * seats <= 60) {
                System.out.println("Ticket price: $10");
            } else {
                if (rows % 2 == 0) {
                    if (checkRow <= rows / 2) {
                        System.out.println("Ticket price: $10");
                    } else {
                        System.out.println("Ticket price: $8");
                    }
                } else {
                    if (checkRow <= rows / 2) {
                        System.out.println("Ticket price: $10");
                    } else {
                        System.out.println("Ticket price: $8");
                    }
                }
            }
        }


    Далее если вы оперируете валютой, то лучше использовать BigDecimal, вместо double.

    Разделите ваш код на объекты. Например, Cinema, Ticket, Session и др. Далее создайте сервисные классы, в которых будут методы по добавлению фильма, по приобретению билетов и т.д.
    Ответ написан
    5 комментариев
  • Как в цикле реализовать проверку условия?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день
    Чтобы не писать кучу if... else или switch ... case, можно попробовать использовать паттерн Chain Of Responsibility
    https://refactoring.guru/ru/design-patterns/chain-...
    Во-первых, код получится более лаконичным, а во-вторых, вы сможете реализовать то, что нужно.
    Условно говоря, если код не проходит на проверку через опеределенный фильтр, то условие не выполняется, а если выполняется, то запрос проходит по цепочке дальше.
    Ответ написан
    1 комментарий
  • Как брать только определенные данные из сайта?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вам нужно написать парсер, который будет собирать для вас необходимую информацию.
    Тут надо отметить один нюанс - все зависит от сайта.
    Например, если сайт является неким MVC app, то вы можете использовать jsoup для парсинга данных. Если контент сайта формируется динамически (т.е. есть некий фронтэнд), то можно не парсить данные из html, а глянуть на внутренний API сайта и спарсить JSON. А дальше средствами java собрать коллекцию pojo из спарсенных данных и сохранить в БД или еще где... А дальше вывести в устройстве (Например, RecyclerView или еще что...)
    В общем, как-то так...
    Ответ написан
  • Какие способы для создания DSL есть в Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Как такового DSL в Java нет.
    Можно наверное воспользоваться либой Apache Camel
    https://camel.apache.org/manual/latest/java-dsl.html
    В ней для реализации Java DSL используется паттерн Fluent Builder.

    Вот, для spring - https://www.baeldung.com/spring-integration-java-dsl

    А зачем переходить на Kotlin только из-за DSL? Какие задачи вам нужно решать именно при помощи DSL
    Ответ написан
    Комментировать
  • Можно ли разрабатывать приложения под Android на Java и Kotlin на MacOS?

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

    Соглашусь с коллегой Денис Загаевский как правило, разрабатывают на MacOS или на Linux. Вообще, не сильно принципиально, но удобнее разрабатывать на них.

    А также обязательно ли иметь Android устройство?

    Желательно. Но обычно эмуляторов бывает достаточно. Эмулятор из Android Studio или Genymotion

    У меня есть Android, но он слабенький или это неважно?

    Важно. Например, версия андроид и т.д. Все зависит от того, что именно вы тестируете. Вдруг вам нужно со старым андроидом для проверки обратной совместимости и т.д.
    Ответ написан
    Комментировать
  • Где создать sessionFactory в Spring проекте?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В чем именно заключается проблема?
    Судя по всему у вас есть hibernate.cfg.xml, а также есть HibernateUtil.
    Можно чуть подправить этот класс на такой вариант:
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.MetadataSources;
    import org.hibernate.boot.registry.StandardServiceRegistry;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    
    public class HibernateUtil {
    
      final static StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
          .configure()
          .build();
    
      private static final SessionFactory sessionFactory;
    
      static {
        try {
          sessionFactory = new MetadataSources(registry).buildMetadata()
              .buildSessionFactory();
        } catch (Throwable ex) {
          throw new ExceptionInInitializerError(ex);
        }
      }
    
      public static Session getSession()
          throws HibernateException {
        Session session = null;
        try {
          session = sessionFactory.getCurrentSession();
        } catch (org.hibernate.HibernateException he) {
          session = sessionFactory.openSession();
        }
        return session;
      }
    
    }


    Далее используя метод getSession() получаете сессию и делаете то, что нужно.
    Например,

    Session session = HibernateUtil.getSession();
          session.beginTransaction();
          note.setTitle("Example");
          session.merge(note);
          session.getTransaction().commit();
          session.close();


    как это сделать в Spring проекте где нету main`a

    Почему это в Spring проекте нет main метода?
    Вот, туториал по Spring Framework, где указан main метод - https://www.youtube.com/watch?v=nLCYk1ySY_U
    Ответ написан
    Комментировать
  • Как работать с файловой системой в Spring Boot?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Но потом, когда я загружу проект на сервер, то там же другая файловая система, другие директории и т.д. - как с этим быть?

    Ну во-первых, как отметил коллега Dmitry Roo нужно использовать относительные пути.
    Во-вторых, у вас должны быть несколько файлов конфигурации (с разными профилями). Например, для dev upload.path будет /home/Desktop/uploads, а для prod профиля будет uploads/ и т.д.

    Во-вторых - а как быть с безопасностью? Как-то же надо фильтровать то, что мне загружают? А то скрипт какой-нибудь загрузят или ещё что-то. Как это вообще отслеживать?

    Обычно, делают проверку MIME type, как на клиентской стороне, так и на стороне сервера.

    Например, средствами js можно запретить загрузку других файлов, кроме image/* и т.д.
    Тоже самое делаю на сервере. Проверяют формат загруженного файла и если он не соответствует ожидаемому MIME type, то выбрасывают исключение и удаляют файл.

    Как отслеживать оставшееся место на диске?

    Смотря, что подразумевается в данном случае. Если хостинг, то java.nio подойдет. А если это amazon s3 или другой сервис, то смотрите документацию к REST API.
    Ответ написан
    2 комментария
  • Java Apache FPTS Client. Как победить 425 Can't open data connection при storeFile()?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    А подскажите пожалуйста, ведь вроде вы пытаетесь подключиться через FTP, но используете FTPSClient
    https://commons.apache.org/proper/commons-net/apid...

    Может быть вам нужен FTPClient?
    https://commons.apache.org/proper/commons-net/apid...

    Могу предположить, что вы пытаетесь подключиться к FTPS, используя порт для FTP (21) и соответственно, возникает ошибка

    Вот, например при подключении к FTP у меня все ок:
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPClientConfig;
    import org.apache.commons.net.ftp.FTPReply;
    
    import java.awt.*;
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
    
            FTPClient ftp = new FTPClient();
            FTPClientConfig config = new FTPClientConfig();
            ftp.configure(config);
            boolean error = false;
            try {
                int reply;
                String host = "example.com";
                ftp.connect(host);
                ftp.login("example_user", "12345");
                System.out.println("Connected to " + host + ".");
                System.out.print(ftp.getReplyString());
    
                reply = ftp.getReplyCode();
    
                if(!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    System.err.println("FTP server refused connection.");
                    System.exit(1);
                }
    
                boolean changed = ftp.changeWorkingDirectory("public_html/");
                if (!changed) {
                    ftp.disconnect();
                }
    
                ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
                ftp.enterLocalPassiveMode();
                InputStream inputStream = new FileInputStream("/home/admin/Desktop/newFile.txt");
                boolean stored = ftp.storeFile("newFile.txt", inputStream);
                if (stored) {
                    System.out.println();
                }
    
                ftp.logout();
            } catch(IOException e) {
                error = true;
                e.printStackTrace();
            } finally {
                if(ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch(IOException ioe) {
                        // do nothing
                    }
                }
                System.exit(error ? 1 : 0);
            }
    
        }
    
    }
    Ответ написан
    1 комментарий
  • Как подключать библиотеки вручную?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    А кто запрещает вам скачанный jar установить в репозиторий maven, а оттуда уже испоьзуя dependency подключить к проекту?
    Вот, аналогичный вопрос - https://stackoverflow.com/questions/4955635/how-to...
    Это конечно, если у вас maven проект и вы хотите подключить локальный jar.

    Если вы хотите подключить локальный jar без maven. то:
    https://www.cs.utexas.edu/~scottm/cs324e/Assignmen...
    Ответ написан
    1 комментарий
  • Как запретить десериализацию поля в jackson?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    нужно , чтобы в поле result попадал json как строка. Менять ответ контроллера (например обернуть в кавычки) я не могу.

    Можно написать свой кастомный конвертер для контроллера.
    https://stackoverflow.com/questions/57536693/how-t...

    Или вы имеете ввиду:

    аннотацию JsonIgnore?
    https://www.tutorialspoint.com/jackson_annotations...
    https://stackoverflow.com/questions/12505141/only-...

    Есть еще аннотации
    https://www.baeldung.com/jackson-bidirectional-rel...
    Ответ написан
    Комментировать
  • Как возможно сделать переключатель на 3 позиции?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Может быть эти материалы будут вам полезны:
    Вот, готовый компонент:
    https://github.com/BeppiMenozzi/TriStateToggleButton
    Вот, похожий вопрос:
    https://stackoverflow.com/questions/44279442/3-sta...

    гуглим
    Ответ написан
    1 комментарий
  • Как работают библиотеки java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Было бы неплохо конкретизировать вопрос. Например, о какой библиотеке Java идет речь?
    Если в целом, то предположим, что у вас есть некая библиотека с неким классом Human, в котором есть некий метод bmi(), который расчитывает индекс массы тела (ИМТ).
    И допустим, вы хотите в своем приложении реализовать функционал расчета ИМТ. Вы подключаете библиотеку в свой проект (через maven, gradle или без них), импортируете нужный класс и работаете с ним.
    Вот и все...
    Ответ написан
    3 комментария
  • Как поднять эффективность обучения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Попробуйте поработать с различными библиотеками. Например, напишите парсер при помощи jsoup. Попробуйте написать некий универсальный тул для экспорта данных в xlsx | csv (Apache POI). Изучите apache common langs, apache common collections и др. распространенные библиотеки. Можете глянуть на lombok.
    Придумайте себе идеи для pet проектов. Например, телефонная книга (javafx), консольное приложение (jcommander) и т.д.
    Решать задачи на hackerrank прикольно и в принципе, можно потратить время на них. В частности, Java, SQL, Problem Solving. Но как отметил коллега, подобные сайты нужны больше при трудоустройстве.
    Попробуйте изучить jdbc, поработать с БД. Вот, сайт sql-ex.ru решите задачи по SQL.
    Ну и не останавливайтесь на достигнутом, развивайтесь дальше. Мне например, для прибавления уверенности в себе помогли фриланс биржи. Я писал различные простые парсеры и ботов. Как бы и денежки есть и прикольно видеть результат своих трудов.
    Ответ написан
    Комментировать
  • Как получить значение определенного параметра в ответе на запрос api (Java Selenium)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Предположу, что в ответе вы получаете JSON. Соответственно, вам нужна либа для работы с json. Например, gson или jackson. Создайте pojo с нужной структурой, прочтите ответ в JSON (десериализация). Получите значение secret.
    Другое решение, если обойтись без либы - напишите DOM Parser.
    Ответ написан
    Комментировать
  • Можно ли так использовать спринг?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день
    имеет ли смысл только для работы с бд подключать springframework

    Может быть для работы с БД стоит подключать ORM фреймворки. Например, Hibernate, EclipseLink, MyBatis, ormlite.

    По факту spring это контейнер бинов (реализация IOC & DI). Соответственно, если вы хотите использовать DI в своем приложении, то можете использовать спринг. Ну или другую либу для DI (guice, dagger etc.)

    Например, если вы пишете JavaFX приложение, то есть хорошая либа для ьыстрой интеграции спринга
    https://github.com/rgielen/javafx-weaver/

    А просто для работы с БД используйте связку hibernate + hikaricp
    Ответ написан
    6 комментариев
  • Как корректно создавать Spring Beans динамически?

    azerphoenix
    @azerphoenix Автор вопроса, куратор тега Java
    Java Software Engineer
    Применительно к данной задаче, которую я описал выше не пришлось созадвать бины динамически.
    Вместо этого было принято решение написать микросервисное приложение, в котором каждый из стран / городов для грапхоппера является отдельным микросервисом работающим внутри докера.
    Таким образом надобность в создании бинов в runtime отпала.

    Если вдруг кому-то все же понадобится создавать бины динамически, то можете глянуть на это решение:
    https://stackoverflow.com/questions/57157396/how-t...
    Ответ написан
    Комментировать
  • В чём ошибка алгоритма (вычисление времени из currentTimeMillis)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как отметил коллега, проблема заключается в часовом поясе.
    https://www.tutorialspoint.com/java/lang/system_cu...

    System.currentTimeMillis()
    This method returns the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC(coordinated universal time).


    Date date = new Date(System.currentTimeMillis());
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
    format.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
    String result = format.format(date);
    System.out.println(result);


    Вот, так можно UTC конвертировать.
    Вывод:
    2021-06-13T19:35:35
    Ответ написан
    Комментировать
  • Как в ENUM добавить знак "-" перед выражением?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вы можете попробовать вместо минусов(тире) использовать нижнее подчеркивание.
    -V => _V

    Можете глянуть на пример enum для римских цифр тут:
    https://stackoverflow.com/questions/3921866/how-do...
    Ответ написан
    Комментировать