Groovy 尝试拆分字符串时出错
Groovy Error while trying to split a String
我试图在每个 '{'
处拆分一个字符串。
我的字符串看起来像 {RANDOM:4{LETTER:5}}
据我所知,我应该使用String.split()
函数。
我的代码如下:
public static String replaceParams(String str) {
System.out.println(str.split("{"));
}
问题来了
错误是:
2019-06-13 15:33:23.042 ERROR k.k.c.m.CustomKeywordDelegatingMetaClass
- ❌ Illegal repetition
{
2019-06-13 15:33:23.051 ERROR c.k.katalon.core.main.TestCaseExecutor - ❌ Test Cases/KeyWordTester
FAILED. Reason: java.util.regex.PatternSyntaxException: Illegal
repetition
{
at java_lang_String$split[=18=].call(Unknown Source) at
com.sgds.util.LoadTester.replaceParams(LoadTester.groovy:126) at
com.sgds.util.LoadTester.modifyFile(LoadTester.groovy:144) at
com.sgds.util.LoadTester.invokeMethod(LoadTester.groovy) at
com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:50)
at KeyWordTester.run(KeyWordTester:16) at
com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194) at
com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at
com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)
at
com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
at
com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
at
com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
at
com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
at
com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
at
com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
at com.kms.katalon.core.main.TestCaseMain$runTestCase[=18=].call(Unknown
Source) at
TempTestCase1560432797559.run(TempTestCase1560432797559.groovy:21)
我搜索了我的整个代码,我向你保证没有 {
没有关闭。
我做的第一件事是我认为这是编译器语法检查器问题,我尝试用它的 ascii 值替换我的 {
,如下所示:
System.out.println(str.split(Character.toString((char)123)))
也不行...
您知道问题出在哪里吗?
{ 和 } 在 Java 的正则表达式方言(以及与此相关的大多数其他方言)中是特殊的:它们是重复量词 {n,m} 的开始和结束标记,其中 n 和m 是整数。因此出现错误消息:"Illegal repetition".
你应该逃避他们:
public static String replaceParams(String str) {
System.out.println(str.split("\{"));
}
您应该使用 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
我试图在每个 '{'
处拆分一个字符串。
我的字符串看起来像 {RANDOM:4{LETTER:5}}
据我所知,我应该使用String.split()
函数。
我的代码如下:
public static String replaceParams(String str) {
System.out.println(str.split("{"));
}
问题来了
错误是:
2019-06-13 15:33:23.042 ERROR k.k.c.m.CustomKeywordDelegatingMetaClass - ❌ Illegal repetition
{
2019-06-13 15:33:23.051 ERROR c.k.katalon.core.main.TestCaseExecutor - ❌ Test Cases/KeyWordTester FAILED. Reason: java.util.regex.PatternSyntaxException: Illegal repetition
{
at java_lang_String$split[=18=].call(Unknown Source) at com.sgds.util.LoadTester.replaceParams(LoadTester.groovy:126) at com.sgds.util.LoadTester.modifyFile(LoadTester.groovy:144) at com.sgds.util.LoadTester.invokeMethod(LoadTester.groovy) at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:50) at KeyWordTester.run(KeyWordTester:16) at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194) at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119) at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337) at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328) at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307) at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299) at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233) at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114) at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105) at com.kms.katalon.core.main.TestCaseMain$runTestCase[=18=].call(Unknown Source) at TempTestCase1560432797559.run(TempTestCase1560432797559.groovy:21)
我搜索了我的整个代码,我向你保证没有 {
没有关闭。
我做的第一件事是我认为这是编译器语法检查器问题,我尝试用它的 ascii 值替换我的 {
,如下所示:
System.out.println(str.split(Character.toString((char)123)))
也不行...
您知道问题出在哪里吗?
{ 和 } 在 Java 的正则表达式方言(以及与此相关的大多数其他方言)中是特殊的:它们是重复量词 {n,m} 的开始和结束标记,其中 n 和m 是整数。因此出现错误消息:"Illegal repetition".
你应该逃避他们:
public static String replaceParams(String str) {
System.out.println(str.split("\{"));
}
您应该使用 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