在java中查找和替换指定字符

在java中查找和替换指定字符,java,Java,如何替换指定索引处的字符 我尝试了下面的方法,但字符串长度会有所不同,所以我的代码失败了 StringBuilder s =new StringBuilder("{1:Gxxxxxxxxxxx000000000Y}{2:YYYYYYY}"); s.setCharAt(pos+24, '1'); 结果:{1:gxxxxxxxxxx0000000001}{2:yyyyyyyy}(正确结果) 但是上面的代码失败了,下面是字符串,它没有给出异常。它给出了inccorect结果: StringBui

如何替换指定索引处的字符

我尝试了下面的方法,但字符串长度会有所不同,所以我的代码失败了

StringBuilder s =new StringBuilder("{1:Gxxxxxxxxxxx000000000Y}{2:YYYYYYY}");

s.setCharAt(pos+24, '1'); 
结果:{1:gxxxxxxxxxx0000000001}{2:yyyyyyyy}(正确结果)

但是上面的代码失败了,下面是字符串,它没有给出异常。它给出了inccorect结果:

StringBuilder s =new StringBuilder("{1:GxxxxxxxxxxxYYY000000000Y}{2:YYYYYYY}");
结果:{1:GXXXXXXXXXYYY000000100Y}{2:YYYYYY}(不正确)

应为:{1:GXXXXXXXXXXXXXYYY0000000001}{2:YYYYYY}

我知道如果我使用
pos+27
它会工作,但我需要一种正确的方法来做,因为字符串可能会变化

问候,


Chaitu

这取决于你想把你的
'1'
放在什么地方的正确描述

例如,如果要将第一个
'}'
前面的字符设置为
'1'
,则可以使用
indexOf()
查找第一个
'}'
的位置,然后从中减去一个以获得其前面的位置:

s.setCharAt(s.indexOf('}') - 1, '1');
编辑

假设您要查找第一个
{1:
之后的第一个
}
,我会这样做:

(a) 首先需要找到起点,在您的例子中,它是
indexOf(“{1:”)

(b) 然后,您需要找到第一个
}
后面的。为此,您可以使用另一个
indexOf()
变量,该变量将索引作为起始参数。换句话说,我们从(a)中获取索引,并将其作为起始点:
s.indexOf(“}”,s.indexOf(“{1:”)

这归结为:

s.setCharAt(s.indexOf("}", s.indexOf("{1:")) - 1, '1');

您是否总是替换字符串的同一部分,即使长度可能不同?例如,如果它始终是
1{…Y}
末尾的位,则使用类似
s.indexOf(“Y}”)
的内容为您提供需要替换的字符位置。显然,这是假设在你想要的字符串之前没有该字符串的其他实例。

你说
代码失败了
,不是因为它给出了一个异常,而是因为它没有给出你想要的结果,对吗?@antoh:是的。我更新了我的问题。不,这可能是个错误。如果你只需要两个“规则”,一个处理
Y}
的情况,另一个处理
Z}
,那么替换这两个的代码将是相同的。为了安全起见:我想找到{1:和“}”,请再看一看。