当前位置: 首页 > 面试题库 >

如何打印多行字符串参数的每个元素?

公良鸿禧
2023-03-14
问题内容

我在Jenkins(v2.7.1)中完成了Pipeline作业,在此我想打印多行字符串参数(Params)的每个元素,每行3个字符串: Foo
BarBaz 作为输入。

因此,我尝试了以下语法(使用spliteach):

Params.split("\\r?\\n").each { param ->
    println "Param: ${param}"
}

但是它失败了:

java.lang.UnsupportedOperationException:尚不支持在经过CPS转换的闭包上调用public static
java.lang.Object
org.codehaus.groovy.runtime.DefaultGroovyMethods.each(java.lang.Object,groovy.lang.Closure)(JENKINS-26481);
封装为@NonCPS方法,或在org.jenkinsci.plugins.workflow.cps.GroovyClassLoaderWhitelist.checkJenkins26481(GroovyClassLoaderWhitelist.java:90)上使用Java样式的循环

建议 使用@NonCPS方法封装,或使用Java样式的循环

所以我试着 用@NonCPS方法封装

@NonCPS
def printParams() {
    Params.split("\\r?\\n").each { param ->
        println "Param: ${param}"
    }
}
printParams()

但是它失败了:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许脚本使用staticMethod
org.codehaus.groovy.runtime.DefaultGroovyMethods println groovy.lang.Closure
java.lang.Object

如果没有该功能(按照第一个示例),则@NonCPS在开始时添加它会抱怨 意外的token

我还尝试了使用 _for_运算符建议的Java样式语法(类似于here):

String[] params = Params.split("\\r?\\n")
for (String param: params) {
    println "Param: ${param}"
}

这似乎可以在普通Groovy中工作,但是在Jenkins中却失败了,原因是:

java.io.NotSerializableException:org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)上的java.util.AbstractList
$ Itr

我应该使用哪种语法使其起作用?


问题答案:

禁用“ 使用Groovy沙箱” 选项并添加@NonCPS帮助程序方法时,代码可以正常工作。或者,按照@
agg3l的建议,进行_Jenkins管理_ 以允许此方法访问。

因此,工作代码是(与第二个示例相同):

@NonCPS
def printParams() {
    Params.split("\\r?\\n").each { param ->
        println "Param: ${param}"
    }
}
printParams()


 类似资料:
  • 问题内容: 如何多次重复一个字符串?我知道我可以使用for循环,但是我想在每一行中重复一行字符串时间。 例如,如果用户输入,则输出将是: 其中等于2,等于4。 问题答案: 要么

  • 输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次。 我相信问题出在我的 if 循环中,但不知何故我不明白为什么它不能正常工作。它会打印我输入的每个字符串。 这是我写的代码:

  • 问题内容: 我想在同一行上打印列表中的项目。我尝试过的代码: 输出= 我想输出到= 此代码仍在新行上打印我的模具的ASCII艺术表示。我想将其打印在同一行上,以节省空间并在一个屏幕上显示每个玩家的状态。 问题答案: 由于的元素是多行字符串,因此要比这更难。 首先,从每个字符串的开头删除换行符,并确保ASCII图形中的所有行都具有相同的长度。 然后尝试以下 如果您将描述的更改应用于ASCII艺术作品

  • 如果我有一个字符串“sssaaadddccc”,我如何只打印“sadc”。可以使用SubString吗?还是必须使用charAt()?

  • 我想获取ArrayList的每个元素并使用它来创建一个字符串: 包含与ArrayList和、、中的元素一样多的单词 将为每个单词打印ArrayList中的int值 为了更清楚,我想打印一个字符串,如下所示: 不幸的是,我只从ArrayList中获取最后一个整数的值,但“元素”字数是正确的,所以我的实际结果字符串如下所示: ArrayList只有4个元素: 要生成此错误字符串,我使用以下代码: 那么

  • 问题内容: 今天才开始学习Java,似乎无法弄清楚。我正在学习Learnjavaonline.org上的教程,该教程教您一些知识,然后要求您编写代码来完成特定的事情,然后检查输出以查看其正确性。问题是,如果它不正确,则不会说出原因,也不会给出正确代码的示例。 它希望我使用所有原语输出一个字符串,说“ H3110 w0r1d 2.0 true” 我想出了这个 } 但它输出 我怎样才能使它不将所有整数