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

时间:2014-05-08 11:37:14

标签: java

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

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

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

s.setCharAt(pos+24, '1'); 

结果:{1:Gxxxxxxxxxxx0000000001} {2:YYYYYYY}(正确的结果)

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

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

结果:{1:GxxxxxxxxxxxYYY000000100Y} {2:YYYYYYY}(不正确)

预期:{1:GxxxxxxxxxxxYYY0000000001} {2:YYYYYYY}

我知道如果我使用pos+27它可行,但我需要一个正确的方法来做,因为字符串可能会有所不同。

此致

Chaitu

2 个答案:

答案 0 :(得分:0)

这取决于您想要放置'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 :(得分:0)

您是否总是更换字符串的相同部分,即使长度可能会有所不同?即如果它始终位于1{...Y}末尾,那么请使用类似s.indexOf( "Y}" )的内容来为您提供需要替换的角色位置。显然,这假设在你想要的那个之前没有其他的字符串实例。