Groovy Ошибка при попытке разбить строку - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь разбить строку на каждом '{'.
Моя строка выглядит как {RANDOM:4{LETTER:5}}

Насколько я знаю, я должен использовать функцию String.split().

Мои коды выглядят так:

public static String replaceParams(String str) {
    System.out.println(str.split("{"));
}

Здесь возникает проблема.

Ошибка:

2019-06-13 15:33:23.042 ОШИБКА kkcmCustomKeywordDelegatingMetaClass - ❌ Неверное повторение
{
2019-06-13 15: 33: 23.051 ОШИБКА ckkatalon.core.main.TestCaseExecutor - ❌ Тестовые случаи / KeyWordTester FAILED.Причина: java.util.regex.PatternSyntaxException: недопустимое повторение
{
при java_lang_String $ split $ 0.call (неизвестный источник) на com.sgds.util.LoadTester.replaceParams (LoadTester.groovy: 126) на ком.sgds.util.в KeyWordTester.run (KeyWordTester: 16) в com.kms.katalon.core.main.ScriptEngine.run (ScriptEngine.java:194) в com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText (ScriptEngine.java:11) в com.kms.katalon.core.main.TestCaseExecutor.runScript (TestCaseExecutor.java:337) в com.kms.katalon.core.main.TestCaseExecutor.doExecute (TestCaseExecutor.java:328) в com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase (TestCaseExecutor.java:307) в com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase (TestCaseExecutor.java:299) в com.kms.katalon.core.main.TestCaseExecutor.execute (TestCaseExecutor.java:233) в com.kms.katalon.core.main.TestCaseMain.runTestCase (TestCaseMain.java:114) в com.kms.katalon.core.main.TestCaseMain.runTestCase (TestCaseMain.java:105) в com.kms.katalon.core.main.TestCaseMain $ runTestCase $ 0.call (неизвестный источник) в TempTestCase1560432797559.run (TempTestCase1560432797559.groovy: 21)

1022 Iпроверил весь мой код и уверяю вас, что
{ не закрыто.

Первое, что я сделал, так как думал, что это проблема проверки синтаксиса компилятора, я попытался заменить { на значение ascii.вот так:

System.out.println(str.split(Character.toString((char)123)))

тоже не работает ...

Знаете ли вы, откуда может возникнуть проблема?

Ответы [ 2 ]

3 голосов
/ 13 июня 2019

Вы должны использовать собственный синтаксис регулярного выражения Groovy:

def res = '{RANDOM:4{LETTER:5}}'.split( /[\{\}]/ )
assert ['', 'RANDOM:4', 'LETTER:5'] == res

Кроме того, я не думаю, что split() - это то, что вам действительно нужно. На основании ваших данных вы бы предпочли:

String txt = '{RANDOM:4{LETTER:5}}'
def res = [:]
txt.eachMatch( /[\{\}]?([A-Z]+):(\d+)[\{\}]?/ ){ res[ it[ 1 ] ] = it[ 2 ].toInteger() }
assert [RANDOM:4, LETTER:5] == res
1 голос
/ 13 июня 2019

{и} являются особенными в диалекте регулярных выражений Java (и в большинстве других диалектов в этом отношении): они являются открывающим и закрывающим токенами для квантификатора повторения {n, m}, где n и m являются целыми числами. Отсюда и сообщение об ошибке: «Недопустимое повторение».

Вы должны избежать их:

public static String replaceParams(String str) {
    System.out.println(str.split("\\{"));
}
...