Groovy 分割文件路径时,是什么导致意外的内部错误?

Groovy 分割文件路径时,是什么导致意外的内部错误?,groovy,jmeter,Groovy,Jmeter,我试图使用groovy在JMeter(3.2)中拆分文件路径,并得到以下错误 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^ 我能够使用中提到的解决方案解决问题,但我想知道为什么会出现错误 这就是我的代码 \\executePath variable has C:\temp\somepath\anotherfolder\ def aa = vars.get("e

我试图使用groovy在JMeter(3.2)中拆分文件路径,并得到以下错误

java.util.regex.PatternSyntaxException: Unexpected internal error near index
1
\
^
我能够使用中提到的解决方案解决问题,但我想知道为什么会出现错误

这就是我的代码

    \\executePath variable has C:\temp\somepath\anotherfolder\
    def aa = vars.get("executePath").split("\\\\");

据我所知,只有在“\\”上拆分时才会出现该错误,可能是因为该错误会被读取为正则表达式的转义字符,而不会转义任何内容。你确定你没有使用

split("\\")
当我尝试以下操作时,我得到了正确的输出

def bb = 'C:\\temp\\somepath\\anotherfolder\\'
def aa = bb.split('\\\\')
println aa
Output [C:, temp, somepath, anotherfolder]

您试图通过拆分java的path接口无法完成的文件路径来完成什么?

据我所知,只有在“\\”上拆分时才会出现该错误,可能是因为该错误会被读取为正则表达式的转义字符,而不会转义。你确定你没有使用

split("\\")
当我尝试以下操作时,我得到了正确的输出

def bb = 'C:\\temp\\somepath\\anotherfolder\\'
def aa = bb.split('\\\\')
println aa
Output [C:, temp, somepath, anotherfolder]
您试图通过拆分java的path接口无法完成的文件路径来实现什么

  • 用于转义任何特殊字符
  • 使用反斜杠代替硬编码,这样您的测试将独立于平台 Groovy代码示例:

    import java.util.regex.Pattern
    
    def aa = vars.get('executePath').split(Pattern.quote(File.separator))
    
    aa.each {
        log.info ("${it}")
    }
    
    演示:

    我还建议查看更多关于JMeter中脚本编写的Groovy提示

  • 用于转义任何特殊字符
  • 使用反斜杠代替硬编码,这样您的测试将独立于平台 Groovy代码示例:

    import java.util.regex.Pattern
    
    def aa = vars.get('executePath').split(Pattern.quote(File.separator))
    
    aa.each {
        log.info ("${it}")
    }
    
    演示:


    我还建议您查看更多关于JMeter中脚本编写的Groovy提示。

    谢谢,我下次会尝试,但它仍然无法回答错误原因。谢谢,我下次会尝试,但它仍然无法回答错误原因。我的路径没有双反斜杠,因此这对我不起作用。字符串表示应为\\,因为您必须转义反斜杠。def bb='C:\temp\somepath\anotherfolder\'将导致错误我从
    ${{uu BeanShell(导入org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}${uu BeanShell(File.separator,)}
    获取路径,并且当我记录保存该路径的变量时,我会得到一个没有双反斜杠的路径。确定,这是因为日志正在打印表示的值,而不是字符串的实际值。要查看存储了哪些值,可以尝试log.info groovy.json.StringEscapeUtils.escapeJava(FileServer.getFileServer().getBaseDir());请记住,反斜杠是正则表达式和字符串的转义字符,这就是为什么需要4个反斜杠。我的路径没有两个反斜杠,因此这对我不起作用。字符串表示形式应该有\\,因为必须转义反斜杠。def bb='C:\temp\somepath\anotherfolder\'将导致错误我从
    ${{uu BeanShell(导入org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}${uu BeanShell(File.separator,)}
    获取路径,并且当我记录保存该路径的变量时,我会得到一个没有双反斜杠的路径。确定,这是因为日志正在打印表示的值,而不是字符串的实际值。要查看存储了哪些值,可以尝试log.info groovy.json.StringEscapeUtils.escapeJava(FileServer.getFileServer().getBaseDir());请记住,反斜杠是正则表达式和字符串的转义字符,这就是为什么需要4个反斜杠