Java的错误答案

时间:2017-02-24 11:35:57

标签: java string

我是一名正在学习Java的学生,我有这段代码:

lletres = lletres.replace(lletres.charAt(2), codi.charAt(codi.indexOf(lletres.charAt(2)) + 1));

lletres是一个字符串,它就像这样

lletres = "BBB"

结果是" CCC"我只想改变最后的B,所以结果可能是这样的:" BBC"。

7 个答案:

答案 0 :(得分:2)

阅读String.replace的文档应该解释这里发生的事情(我用粗体标记了相关部分):

  

返回通过使用oldChar替换此字符串中newChar所有出现次数而产生的字符串。

解决这个问题的一种方法是将字符串分解为您想要的部分,然后再将其重新组合在一起。 E.g:

lletres =  lletres.substring(0, 2) + (char)(lletres.charAt(2) + 1);

答案 1 :(得分:1)

正如其他人指出的replace()将取代所有匹配的事件。

因此,您可以使用replaceFirst()来接受regx

lletres = lletres.replaceFirst( lletres.charAt( 2 ) + "$", (char) ( lletres.charAt( 2 ) + 1 ) + "" )

答案 2 :(得分:0)

您可以将StringBuilder用于您的目的:

String lletres = "BBB";
String codi = "CCC";

StringBuilder sb = new StringBuilder(lletres);
sb.setCharAt(2, codi.charAt(codi.indexOf(lletres.charAt(2)) + 1));
lletres = sb.toString();

答案 3 :(得分:0)

如果您只需要更改字符串中的最后一个匹配项,则需要先将字符串拆分为多个部分。我希望以下代码片段对您有所帮助。

String lletres = "BBB";
int lastIndex = lletres.lastIndexOf('B');
lletres = lletres.substring(0, lastIndex) + 'C' + lletres.substring(lastIndex+1);

此代码将找到最后一个字母B的索引并将其存储在lastIndex中。然后它拆分字符串并用C字母替换那个B字母。

请注意,此代码段不会检查字符串中是否包含字母B.

稍作修改,你可以用它来替换字符串的整个部分,而不仅仅是字母。 :)

答案 4 :(得分:0)

试试这个。

class Rplce
{
public static void main(String[] args)
{
    String codi = "CCC";
String lletres = "BBB";
int char_no_to_be_replaced = 2;
lletres = lletres.substring(0,char_no_to_be_replaced ) + codi.charAt(codi.indexOf(lletres.charAt(char_no_to_be_replaced )) + 1) + lletres.substring(char_no_to_be_replaced + 1);
System.out.println(lletres);
}
}

答案 5 :(得分:0)

  

用它来替换最后一个字符

  lletres = lletres.replaceAll(".{1}$", String.valueOf((char) (lletres.charAt(2) + 1)));

答案 6 :(得分:0)

假设您在最后一个索引处有动态值,并且您希望替换该值将增加一个然后使用此代码

   String lletres = "BBB";
   int atIndex = lletres.lastIndexOf('B');
   char ReplacementChar = (char)(lletres.charAt(lletres.lastIndexOf('B'))+1);
   lletres= lletres.substring(0, atIndex)+ReplacementChar;
   System.out.println(lletres);

<强>输出

BBC