Java 为什么Apache Commons StringEscapeUtils escapeXML10不能在groovy中工作?

Java 为什么Apache Commons StringEscapeUtils escapeXML10不能在groovy中工作?,java,groovy,apache-commons,stringescapeutils,Java,Groovy,Apache Commons,Stringescapeutils,我有一个简单的groovy脚本,我想为XML转义一个字符串 @Grapes(@Grab(group='org.apache.commons', module='commons-lang3',version='3.9')) import org.apache.commons.lang3.StringEscapeUtils def value = "[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512

我有一个简单的groovy脚本,我想为XML转义一个字符串

 @Grapes(@Grab(group='org.apache.commons', module='commons-lang3',version='3.9'))
import org.apache.commons.lang3.StringEscapeUtils

 def value = "[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]"
 StringEscapeUtils.escapeXml11​(value.toString())
根据,这个方法看起来只需要一个字符串,所以为什么它会给出这个异常

 No signature of method: static org.apache.commons.lang3.StringEscapeUtils.escapeXml11​() is applicable for argument types: (String) values: [[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]]

我已经测试并收到了相同的错误消息,但是我将方法更改为
escapeXml11
,现在可以工作了:

import org.apache.commons.lang3.StringEscapeUtils

class Program {
    static void main(String[] args) {
        testStringUtils()
    }

    private static void testStringUtils() {
        def value = "[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]"
        def sample = StringEscapeUtils.escapeXml11(value)
        println(sample)
    }
}
我使用的是3.9版:

compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
这是输出:

> Task :Program.main()
[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
17:24:42: Task execution finished 'Program.main()'.

我已经测试并收到了相同的错误消息,但是我将方法更改为
escapeXml11
,现在可以工作了:

import org.apache.commons.lang3.StringEscapeUtils

class Program {
    static void main(String[] args) {
        testStringUtils()
    }

    private static void testStringUtils() {
        def value = "[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]"
        def sample = StringEscapeUtils.escapeXml11(value)
        println(sample)
    }
}
我使用的是3.9版:

compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
这是输出:

> Task :Program.main()
[Apple MacBook Pro with Touch Bar - 15.4 & Core i7 - 16 GB RAM - 512 GB SSD]

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
17:24:42: Task execution finished 'Program.main()'.

代码中有一个不可打印的字符:

  Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   
00000000: 53 74 72 69 6E 67 45 73 63 61 70 65 55 74 69 6C    StringEscapeUtil
00000010: 73 2E 65 73 63 61 70 65 58 6D 6C 31 31 E2 80 8B    s.escapeXml11b..
00000020: 28 76 61 6C 75 65 2E 74 6F 53 74 72 69 6E 67 28    (value.toString(
00000030: 29 29 0A                                           )).
请参见
Xml11
后面的内容


它适用于普通字符。

代码中有一个不可打印的字符:

  Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   
00000000: 53 74 72 69 6E 67 45 73 63 61 70 65 55 74 69 6C    StringEscapeUtil
00000010: 73 2E 65 73 63 61 70 65 58 6D 6C 31 31 E2 80 8B    s.escapeXml11b..
00000020: 28 76 61 6C 75 65 2E 74 6F 53 74 72 69 6E 67 28    (value.toString(
00000030: 29 29 0A                                           )).
请参见
Xml11
后面的内容


它适用于普通字符。

更正:
escapeXml10​在版本3.3中引入,所以您可能有旧版本的库。在这种情况下,请使用已弃用版本的方法:
escapeXml
这是已弃用的
escapeXml
,而不是
escapeXml10
。你们正在讨论不同的图书馆;commons.lang和commons.text不是相同的包。它们可能运行相同的(或类似的;文本明确声明它是从lang 3.5“改编”的)代码(未选中),但它们不是同一件事。@DaveNewton和Victor,我更新了我的代码以使用commons.lang,但仍然得到错误。更正:
escapeXml10​在版本3.3中引入,所以您可能有旧版本的库。在这种情况下,请使用已弃用版本的方法:
escapeXml
这是已弃用的
escapeXml
,而不是
escapeXml10
。你们正在讨论不同的图书馆;commons.lang和commons.text不是相同的包。它们可能运行相同的(或类似的;文本明确声明它是从lang 3.5“改编”的)代码(未选中),但它们不是同一件事。@DaveNewton和Victor,我已将代码更新为使用commons.lang,但仍然出现错误。您使用的是org.apache.commons.commons-text的哪个版本?我使用的是3.9版:
编译组:'org.apache.commons',名称:'commons-lang3',版本:'3.9'
。明白了,你们把语言和文字混为一谈;这些是不同的包。您使用的是org.apache.commons.commons-text的哪个版本?我使用的是3.9版:
编译组:'org.apache.commons',名称:'commons-lang3',版本:'3.9'
。明白了,你们把语言和文字混为一谈;那是不同的包裹。那是怎么进去的?也许是从文档中复制和粘贴?@AbuMariam最有可能——从网络/视频编辑器中剪切和粘贴通常会无缘无故地引入彻底的疯狂。这是其中一个很明显应该起作用的事情,所以我通常会立即检查假设!那是怎么进来的?也许是从文档中复制和粘贴?@AbuMariam最有可能——从网络/视频编辑器中剪切和粘贴通常会无缘无故地引入彻底的疯狂。这是其中一个很明显应该起作用的事情,所以我通常会立即检查假设!