String Groovy:replaceLast()丢失

String Groovy:replaceLast()丢失,string,groovy,replace,String,Groovy,Replace,我需要Groovy脚本中的replaceLast()方法-替换最后一个子字符串。它在Java中可用,但在Groovy AFAIK中不可用。它必须以与下面replaceFirst相同的方式使用regex replaceFirst(CharSequence self, Pattern pattern, CharSequence replacement) Replaces the first substring of a CharSequence that matches the given comp

我需要Groovy脚本中的replaceLast()方法-替换最后一个子字符串。它在Java中可用,但在Groovy AFAIK中不可用。它必须以与下面replaceFirst相同的方式使用regex

replaceFirst(CharSequence self, Pattern pattern, CharSequence replacement)
Replaces the first substring of a CharSequence that matches the given compiled regular expression with the given replacement.
编辑:对不起,不够具体。原始字符串是一个XML文件,同一个密钥(例如名称)多次出现。我想换最后一个

<Header>
    <TransactionId>1</TransactionId>
    <SessionId>1</SessionId>
    <User>
       <Name>Bob</Name>
       ...
    </User>
    <Sender>
       <Name>Joe</Name>
       ...
    </Sender>
 </Header>
 ...
 <Context>
    <Name>Rose</Name>
    ...
 </Context>

1.
1.
上下快速移动
...
乔
...
...
玫瑰
...

不知道Java中的
replaceLast
是什么…它不在JDK中。。。如果它在JDK中,您可以在Groovy中使用它

无论如何,使用XML解析器来更改XML而不是使用正则表达式怎么样

给定一些xml:

def xml = '''<Header>
    <TransactionId>1</TransactionId>
    <SessionId>1</SessionId>
    <User>
       <Name>Bob</Name>
    </User>
    <Sender>
       <Name>Joe</Name>
    </Sender>
    <Something>
       <Name>Tim</Name>
    </Something>
 </Header>'''
然后,您可以对名为
name
的所有节点执行深度优先搜索,并获取最后一个
-1
节点:

def lastNameNode = parsed.'**'.findAll { it.name() == 'Name' }[-1]
然后,将该值设置为新字符串:

lastNameNode.value = 'Yates'
并打印新的XML:

println XmlUtil.serialize(parsed)

1.
1.
上下快速移动
乔
耶茨

不知道Java中的
replaceLast
是什么…它不在JDK中。。。如果它在JDK中,您可以在Groovy中使用它

无论如何,使用XML解析器来更改XML而不是使用正则表达式怎么样

给定一些xml:

def xml = '''<Header>
    <TransactionId>1</TransactionId>
    <SessionId>1</SessionId>
    <User>
       <Name>Bob</Name>
    </User>
    <Sender>
       <Name>Joe</Name>
    </Sender>
    <Something>
       <Name>Tim</Name>
    </Something>
 </Header>'''
然后,您可以对名为
name
的所有节点执行深度优先搜索,并获取最后一个
-1
节点:

def lastNameNode = parsed.'**'.findAll { it.name() == 'Name' }[-1]
然后,将该值设置为新字符串:

lastNameNode.value = 'Yates'
并打印新的XML:

println XmlUtil.serialize(parsed)

1.
1.
上下快速移动
乔
耶茨

的可能重复,但我不能在Groovy中使用replaceLast(),或者我可以?怎么做?我决定使用前缀方法,而不是搜索最后一个事件。可能是的副本,但我不能在Groovy中使用replaceLast(),或者我可以?怎么做?我决定使用前缀方法,而不是搜索最后一个事件。嗯,我被一个搜索引擎误导了,我做了搜索,第一行是“string-java replaceLast()-Stack Overflow”-没有注意到这篇文章来自提问而不是回答:-)嗯,我被一个搜索引擎误导了,我做了搜索,第一行是“string-java replaceLast()-Stack Overflow”-没有注意到这篇文章来自问题而不是答案:-)