Java считывает строковый символ за символом и помещает их в массив

String text = "99.91.220.138 - - [05/Oct/2015:06:37:26 +0300] "GET /R/0A/ID_0000013091.ism/QualityLevels(1469889)/Fragments(video=14795200000) HTTP/1.1" 200 658377 "-" "Firefox/1.5" "-" rt=0.000 ut = "-" cs=HIT";

Я хочу прочитать все символы этой строки и поместить строку между двумя пустыми пробелами в массив:

- array[0] will be "99.91.220.138"



- array[1] will be "-"



- array[2] will be "-"

и теперь, если между двумя пустыми пробелами есть "[]" или кавычки (""), я хочу получить строку до конца таких знаков, как:

- array[3] will be "[05/Oct/2015:06:37:26 +0300]"



- array[4] will be "GET
   /R/0A/ID_0000013091.ism/QualityLevels(1469889)/Fragments(video=14795200000)
   HTTP/1.1"

после или до этого мне нужно удалить «-» и что-то ненужное из массива для большей производительности.

.

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

Не могли бы вы пояснить, почему вам не нужно решение, использующее регулярное выражение? Кажется, это действительно хороший вариант использования для одного.

Ben 06.07.2018 11:42

Мой руководитель группы не разрешает использовать регулярное выражение

Ali Göktaş 06.07.2018 11:44

Используйте String # slpit пробелом text.split(" ")

Amit Bera 06.07.2018 11:45

Что насчет "[ "

Ali Göktaş 06.07.2018 11:46

Какой странный выбор со стороны руководителя вашей группы. Что ж, это тоже исключает String.split. Использует регулярное выражение. Вам, вероятно, следует преобразовать вашу String в char[], сделать это очень сложным и запутанным способом, а затем, возможно, поговорить с руководителем вашей группы, что прямое запрещение регулярных выражений, возможно, не лучший вариант.

Ben 06.07.2018 11:47

Чтобы вы начали с идеи: переберите свой char[], установите некоторый логический флаг в значение true при обнаружении [, игнорируйте пробелы, пока не встретите ], где вы снова установите свой флаг в значение false. Это должно быть достаточно легко реализовать.

Ben 06.07.2018 11:51

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

Torben 06.07.2018 13:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
54
1

Ответы 1

Я бы порекомендовал вам использовать функцию разделения.

Итак, для вашей первой функциональности вы используете:

string.split(" ");

Чтобы сохранить процитированные утверждения, это может вам помочь:

Разделить строку по пробелам, сохраняя сегменты в кавычках, позволяя использовать экранированные кавычки

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

Ben 06.07.2018 11:50

string.split ("") мне не помогает, потому что мне нужно также получить строку между '[' и ']'

Ali Göktaş 06.07.2018 11:50

Я сделал это с помощью регулярного выражения, но теперь мне нужно сделать это по-другому.

Ali Göktaş 06.07.2018 11:52

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

Rwatnberzje 06.07.2018 12:59

Другие вопросы по теме