У меня есть Java-бот, над которым я работаю, который принимает данные от пользователя через сообщение IRC. Пользователь вводит что-то вроде .host file=foo file=bar hostname="this is a name", и он запускает для них сервер на основе их ввода.
Прямо сейчас у меня есть метод, который в основном анализирует их сообщение, ищет hostname="" (должен быть заключен в кавычки), разбивает часть hostname= и устанавливает имя хоста в соответствии с их результатом (например, hostname="this is имя" станет -hostname "это имя"). Я использую регулярное выражение для этого.
Затем я разбиваю строку на массив (разделенный пробелами) и передаю информацию обработчику процессов, который выполняет команду в своем собственном потоке. Финальная команда выглядит примерно так:
./server -hostname "это имя"
Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку я разделяю пробелами, если пользователь добавляет тире в имя хоста (например, hostname="this is - a name", он будет думать, что тире относится к аргументу , а остальное в основном отрубит.
Дальнейшее объяснение: ProcessBuilder будет разделен пробелами, поэтому он будет передавать «-hostname», «this», «is», «-», «a», «name». Здесь у меня проблемы, так как - означает, что я должен передавать аргумент, но я его использую не для этого.
Каков был бы наиболее эффективный способ реализовать это, чтобы любой передаваемый символ был только буквально этим символом? Должен ли я не разделяться на пробелы? Если я запускаю ./server -hostname "это - имя" из оболочки Linux, все будет работать нормально.
Я ценю любую помощь. Спасибо!