我完全不知道为什么charAt()
在某些情况下有效但在其他情况下无效。我在学习Java时正在练习,其中一个是取一个字符串,然后以相反的顺序返回。
我的工作代码:
public String reverseString(String tempStr){
int initialindex = tempStr.length()-1;
int reverseindex = 0;
char tmp;
char[] array = new char[tempStr.length()];
for(int tempchar : array){
tmp = tempStr.charAt(initialindex);
array[reverseindex] = tmp;
initialindex--;
reverseindex++;
}
String returnstr = new String(array);
return returnstr;
}
我遇到的问题是使用以下for
语句打印乱码:
for(int tempchar : array){
array[reverseindex] = tempStr.charAt(initialindex);
initialindex--;
reverseindex++;
}
使用while
循环,标准for
循环和其他一些丑陋且无效的代码版本可能有十几种不同的变体。为什么我创建一个char tmp
字段,将检查过的字符放在所述字段中,然后使用所述字段将数据输入到数组工作中?
另外,为什么我无法仅使用return array.toString();
返回字符串?
编辑:我正在使用我今天下载的最新Eclipse,从netbeans切换。
答案 0 :(得分:2)
我将您的代码复制到我的编辑器中,使用tmp
字段或不使用任何一个版本都可以正常运行。你必须使用其他方法犯了一些其他错误。
Java不支持数组的漂亮.toString()
;任何不覆盖toString
的对象都会产生对象的hashCode而不是对象的contents / fields,而数组在这里也不例外。虽然对于字符数组似乎很合理,但对int数组的相同操作会产生无意义的操作;查看Arrays.toString()
和String.valueOf(array)
之间的区别。在这种情况下,您可能希望使用String.valueOf
方法。
答案 1 :(得分:0)
作为开始使用的提示:如果要将char
数组转换为String
,请使用带有String
数组的char
构造函数。
更新:我看到你在编辑中已经这样做了。它现在按预期工作吗?
你的循环看起来有点奇怪,因为你从不使用你的循环变量。你可以试试这个:
char[] initialArray = initialStr.toCharArray();
char[] array = new char[tempStr.length()];
for(int srcIndex = 0, destIndex = array.length-1; destIndex >= 0; srcIndex++, destIndex--) {
array[destIndex] = initialArray[srcIndex];
}
答案 2 :(得分:0)
对象的array.toString()
返回字符串表示形式。您需要使用String new String(array)
的char []构造函数从char []创建String。
答案 3 :(得分:0)
public String reverse(String str)
{
if(str == null)
{
return null;
}
byte[] byteArray= str.getBytes();
int arrayLastIndex = byteArray.length -1 ;
for(int i=0 ; i < byteArray.lenght/2: i++)
{
byte temp = byteArray[i];
byteArray[i] = byteArray[arrayLastIndex -i ]
byteArray[arrayLastIndex - i] = temp;
}
return new String(byteArray);
}