Groovy String Tokenizer соответствует неправильному разделителю - PullRequest
0 голосов
/ 29 октября 2018

У меня есть строка с такими значениями, как «inactiveCatalog% 2CwrongTransaction», я хочу перенести это в список разрыва «% 2C» ....

String rseFiltersToRemove = "inactiveCatalog%2CwrongTransaction"
ArrayList rseFiltersToRemoveList = rseFiltersToRemove.tokenize("%2C")

Я ожидал, что в списке будет 2 элемента ("inactiveCatalog" и "errorTransaction"), но в нем будет 3 ("inactive", "atalogItems" и "errorTransaction").

Таким образом, он думает, что «C» в «inactiveCatalog» является разделителем.

Как это могло быть, если я установил разделитель на "% 2C"?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

tokenize использует любой из разделителей согласно StringTokenizer.tokenize .

Вы можете просто использовать split со своей строкой в ​​качестве разделителя:

groovy:000> 'inactiveCatalog%2CwrongTransaction'.split("%2C")
===> [inactiveCatalog, wrongTransaction]
0 голосов
/ 29 октября 2018

Метод tokenize() использует каждый символ строки в качестве разделителя. Таким образом, .tokenize("%2C") разделяется на %, 2 и C.

Обратите внимание, что вы не получаете пустые элементы (которые могут быть между % и * и 1011 * и C), потому что tokenize() отбрасывает эти пустые строки, когда разделитель появляется дважды подряд.

Вам нужен split(), который принимает всю строку в качестве разделителя:

ArrayList rseFiltersToRemoveList = rseFiltersToRemove.split('%2C');
// => [inactiveCatalog, wrongTransaction]

См. онлайн Groovy демо .

...