Я знаю, я знаю, теперь у меня есть две проблемы, и все это, но регулярное выражение здесь означает, что мне не нужно писать два сложных цикла. Вместо этого у меня есть регулярное выражение, которое только я понимаю, и я буду работать на йонков.
У меня есть строка, скажем stack.overflow.questions[0].answer[1].postDate
, и мне нужно получить [0] и [1], предпочтительно в массиве. "Легко!" воскликнули мои нейроны, просто используйте regex и метод split
в вашей входной строке; поэтому я придумал это:
String[] tokens = input.split("[^\\[\\d\\]]");
, который произвел следующее:
[, , , , , , , , , , , , , , , , [0], , , , , , , [1]]
О, дорогой. Итак, я подумал: «Что будет replaceAll
делать в этом случае?»:
String onlyArrayIndexes = input.replaceAll("[^\\[\\d\\]]", "");
который произвел:
[0][1]
Хм. Почему так? Я ищу двухэлементный массив строк, который содержит «[0]» в качестве первого элемента и «[1]» в качестве второго. Почему разделение здесь не работает, когда Javadoc объявляют, что оба используют класс Pattern согласно Javadoc ?
Подводя итог, у меня есть два вопроса: почему вызов split()
создает этот большой массив с кажущимися случайными символами пробела и Прав ли я, полагая, что replaceAll работает, потому что регулярное выражение заменяет все символы не совпадают с "[", числом и "]" ? То, что я упускаю, означает, что я ожидаю, что они произведут подобный вывод (хорошо, это три, и, пожалуйста, не отвечайте «подсказка?» На этот!).