增加字符串的最后一个字母

时间:2010-10-23 01:35:20

标签: java string

这就是我希望Java的String类有一个replaceLast方法的地方,但是我没有用我的代码得到错误的结果。

我正在编写一个程序,在数据结构中搜索与字符串前缀匹配的任何项目。但是,因为我正在使用Iterator,所以iter.next()调用返回的最后一项与模式不匹配,所以我想更改搜索字符串,以便查询的最后一个字符增加一个字母。我的测试代码返回[带有此代码的C @ b82368和An作为titleSearch:

public String changeLastCharacter(String titleSearch) {
    char[] temp= titleSearch.toCharArray();

    char lastLetter= temp[temp.length-1];
    lastLetter++;
    temp[temp.length-1]= lastLetter;

    String newTitleSearch= temp.toString();
    return newTitleSearch;
}

首先,这段代码输出的原因是什么? 第二,有更好的方法来执行我的解决方案吗?

3 个答案:

答案 0 :(得分:4)

你想:

newTitleSearch = new String(temp);

数组不会覆盖toString方法;这是通常的Object.toString,用于调试。以上实际上创建了一个字符串。另一种选择是:

int len = titleSearch.length();
String allButLast = titleSearch.substring(0, len - 1);
newTitleSearch = allButLast + new Character(titleSearch.charAt(len - 1) + 1);

答案 1 :(得分:2)

每当您看到....@<hex-digits>之类的意外输出时,您可能会意外地在某个对象上使用toString(),该对象的类继承了Object的默认实现。

默认的toString()方法返回一个String,其值由对象的类型名称和对象的“身份哈希码”组成,作为十六进制数字。在您的情况下,[C部分是char[]对象的类型名称。 '['表示“数组”和'C'表示char基元类型。

java.lang.Class.getName()的javadocs中完整记录了用于形成默认toString()方法中使用的类型名称的规则。

答案 2 :(得分:1)

您的问题是temp.toString()。请改为String newTitleSearch = new String(temp);

在temp [1] add分配给递增的值后,我通过System.out.println(temp[0]+","+temp[1]);计算出来了。使用IDE的调试器可以更轻松地完成这项工作。

由于阵列分配正确,问题必须在toString()