这就是我希望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;
}
首先,这段代码输出的原因是什么? 第二,有更好的方法来执行我的解决方案吗?
答案 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()
。