【问题标题】:Unable to replace String containing special characters "["无法替换包含特殊字符“[”的字符串
【发布时间】:2021-04-05 15:20:09
【问题描述】:

我的 groovy 版本是 3.0.7。

我试过这个:

String str1="Hello[World[Test"
String str2=str1.replaceAll("\\[","")

错误详情:

2021-04-06 01:11:33,087 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script106.groovy: 19: Unexpected input: '(' @ line 19, column 24.
String str2 = str1.replaceAll("\[","")

我怎样才能做到这一点?

String str2=str1.replaceAll("\\[","")

【问题讨论】:

  • 我无法在 3.0.7 中重现这一点,将这两行保存到一个文件中并使用 groovy so.groovy 运行它。 JSR223 的东西会建议,你不只是使用 groovy 来运行代码。请提供导致该错误的所有事实。
  • 您的源代码显示str1.replaceAll("\\[","") 我认为是有效的,但错误消息显示str1.replaceAll("\[","") 我认为不是。这段代码是否是在某个上下文中输入的,其中在此代码进入 Groovy 解释器之前评估了 `\`?
  • 此代码是 jmeter JSR223 PostProcessor 的一部分。使用普通的 groovy 脚本,我可以用 replaceAll 函数替换特殊字符“[”。但是当它与 JSR223 PostProcessor 一起使用时,相同的代码会得到不同的评估。我需要在结果中替换“[”字符。如何使用 JSR223 PostProcessor 实现这一点?

标签: groovy jmeter replaceall


【解决方案1】:

您可以使用String 提供的replaceAll 方法。

groovy:000> str1="Hello[World[Test"
===> Hello[World[Test
groovy:000> str1.replaceAll('\\[', '')
===> HelloWorldTest
~ $ groovy -version
Groovy Version: 2.5.13 JVM: 1.8.0_202 Vendor: Azul Systems, Inc. OS: Mac OS X
~ $ 
~ $ cat doit.groovy 
String str1='Hello[World[Test'
String str2 = str1.replaceAll('\\[', '')
println str2
~ $ 
~ $ groovy doit
HelloWorldTest

【讨论】:

    【解决方案2】:

    我无法使用Groovy 3.0.7 附带的最新JMeter 5.4.1 重现您的问题

    问题不在于这两行,而在于其他地方,就在这几行之前或之后,如果没有看到完整的后处理器脚本,就很难分辨出确切的位置。

    另外,如果这是您的代码唯一要做的事情,您可能需要考虑使用__strReplace()__strReplaceRegex(),它们是Custom JMeter Functions,可以使用JMeter Plugins Manager 安装

    【讨论】:

    • 对我来说,同样适用于 JSR 223 采样器,但问题在于 JSR223 PostProcessor,而我收到错误 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor javax.script.ScriptException: org.codehaus .groovy.control.MultipleCompilationErrorsException: 启动失败: Script106.groovy: 19: Unexpected input: '(' @ line 19, column 24. String str2 = str1.replaceAll("[","") –
    • “相同”无论在哪个 JSR223 测试元素“相同”被调用,如果您使用 Debug SamplerDummy Sampler 创建一个新的测试计划,添加 JSR223 PostProcessor 和“相同”的代码你应该看到“相同”的“相同”结果。
    猜你喜欢
    • 2014-03-30
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多