在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:和“}”,请再看一看。