Nano Hash - криптовалюты, майнинг, программирование

Вырезать строку (java)

Я хотел бы сократить свою строку "ftp://user:[email protected]:21", чтобы каждая статья была в строке

другими словами, я хочу иметь:

String ftp = "ftp.domain.com"

String user = "user"

String password = "password"

String port = "21"

Этот код работает, но немного грязный, верно?

String fullFtpAdress = "ftp://user:[email protected]:21";
fullFtpAdress = fullFtpAdress.substring(6);
String[] parts1 = fullFtpAdress.split(":",2);
String user = parts1[0];
String[] parts2 = parts1[1].split("@");
String password = parts2[0];
String[] parts3 = parts2[1].split(":");
String ftp = parts3[0];
String port = parts3[1];

У вас есть другое решение?

Спасибо :)

09.01.2020

  • Что ж, вы можете использовать регулярное выражение вместе с группами захвата (что может быть необязательным) и получить их. Для этого посмотрите, как использовать Pattern и Matcher. - Само регулярное выражение могло бы выглядеть так (сразу пришло мне в голову, поэтому оно может быть не идеальным и может содержать ошибки - хотя оно должно помочь вам начать): [^:]+://([^:]+):([^@])+@([^:]+):([^/]+) - группа 1 будет пользователем, группа 2 паролем, группа 3 домен и группа 4 порт. 09.01.2020
  • Похоже, вы хотите использовать java.net. URI 09.01.2020
  • Если вы новичок в использовании регулярного выражения, вы можете попробовать использовать эту страницу regexr.com, это очень помогает понять, как работает регулярное выражение. 09.01.2020

Ответы:


1

Вероятно, не самый чистый способ, но это только с одним разделением.

String fullFtpAddress = "ftp://user:[email protected]:21";
String[] parts = fullFtpAddress.split("[:,@,/]");
String domain = parts[5];
String user = parts[3];
String password = parts[4];
String port = parts[6];

Использование Ури:

URI uri = URI.create(fullFtpAddress);
String domain = uri.getHost();
String userInfo = uri.getUserInfo();
String user = userInfo != null ? userInfo.split(":")[0] : null;    
String password = userInfo != null ? userInfo.split(":")[1]: null;
int port = uri.getPort();
09.01.2020
  • Это строка домена 09.01.2020
  • спасибо Maxdola, я буду использовать URI. это кажется лучшим :) 09.01.2020

  • 2

    Используйте поля URL:

    URL url = new URL("ftp://user:[email protected]:21");
    String userInfo = url.getUserInfo();
    String protocol = url.getProtocol();
    String host = url.getHost();
    int port = url.getPort();
    ...
    
    09.01.2020
  • Это лишь часть того, о чем он просил. 09.01.2020
  • @Maxdola, когда я ввел ответ, предыдущий ответ уже был принят; предоставлена ​​ссылка. Добавлено несколько геттеров, но не все обрабатываются; userInfo может быть нулевым и должен быть разделен на имя и пароль. 09.01.2020
  • Хорошо, я вижу, userInfo может быть нулевым, но не будет нулевым, поскольку он предоставил URL-адрес, у которого есть userInfo. 09.01.2020
  • @Maxdola да. String user = userInfo == null ? null : userInfo.split(":")[0]; - Все-таки раскол. 09.01.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..