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