代码之家  ›  专栏  ›  技术社区  ›  Jason

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

  •  0
  • Jason  · 技术社区  · 14 年前

    在这里,我希望Java的字符串类有一个替换方法,如果没有,我的代码会得到错误的结果。

    我正在编写一个程序,它在数据结构中搜索与字符串前缀匹配的任何项。但是,由于我使用的是迭代器,iter.next()调用返回的最后一个项与模式不匹配,因此我希望更改搜索字符串,使查询的最后一个字符增加一个字母。我的测试代码正在返回[C@B82368和此代码 An 作为标题:

    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 回复  |  直到 10 年前
        1
  •  4
  •   Matthew Flaschen    10 年前

    你想要:

    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);
    
        2
  •  2
  •   Stephen C    14 年前

    每当你看到意外的输出 ....@<hex-digits> ,很可能是您不小心使用了 toString() 在其类从继承默认实现的某个对象上 Object .

    默认值 托斯特林() 方法返回一个字符串,该字符串的值由对象的类型名和对象的“标识哈希代码”组合为十六进制数字组成。在你的情况下 [C part是 char[] 对象。“[”表示“数组of”,“c”表示 char 本原类型。

    构成默认中使用的类型名的规则 托斯特林() 方法在javadocs中完全记录 java.lang.Class.getName() .

        3
  •  1
  •   Tony Ennis    14 年前

    你的问题是 temp.toString() . 尝试 String newTitleSearch = new String(temp); 相反。

    我是通过 System.out.println(temp[0]+","+temp[1]); 在将temp[1]add分配给递增值之后。通过使用您的IDE调试器,您可以更容易地做到这一点。

    由于正确分配了数组,因此问题必须出现在 toString() .