在没有StringBuilder的Java中反转字符串
我正在尝试在不使用在没有StringBuilder的Java中反转字符串,java,string,reverse,Java,String,Reverse,我正在尝试在不使用StringBuilder的情况下反转字符串。我已经写了下面的代码,但是它一进入循环就给出了一个错误。错误是 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16 at lectures.ReverseString.main(ReverseString.java:38) 如果有人能告诉我为什么那太好了。仅供参考,我意识到该代码既不高效也不优雅,但我想知道它为什么不适用于教育 publi
StringBuilder
的情况下反转字符串。我已经写了下面的代码,但是它一进入循环就给出了一个错误。错误是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
at lectures.ReverseString.main(ReverseString.java:38)
如果有人能告诉我为什么那太好了。仅供参考,我意识到该代码既不高效也不优雅,但我想知道它为什么不适用于教育
public static void main(String[] args) {
//declare variables
Scanner input = new Scanner(System.in);
String myString = "";
int length = 0, index = 0, index2 = 0;
//get input string
System.out.print("Enter the string you want to reverse: ");
myString = input.nextLine();
//find length of string
length = myString.length();
index2 = length;
//convert to array
char[] stringChars = myString.toCharArray();
char[] stringChars2 = stringChars;
//loop through and reverse order
while (index<length) {
stringChars2[index] = stringChars[index2];
index++;
index2--;
}
//convert back to string
String newString = new String(stringChars2);
//output result
System.out.println(newString);
//close resources
input.close();
}
publicstaticvoidmain(字符串[]args){
//声明变量
扫描仪输入=新扫描仪(System.in);
字符串myString=“”;
int-length=0,index=0,index2=0;
//获取输入字符串
System.out.print(“输入要反转的字符串:”);
myString=input.nextLine();
//查找字符串的长度
length=myString.length();
index2=长度;
//转换为数组
char[]stringChars=myString.tocharray();
char[]stringChars2=stringChars;
//循环和反向顺序
而(index数组中的最后一个索引不是数组.length
,而是数组.length-1
。数组是在零基上索引的,第一个索引是0
例如,具有两个元素的数组具有索引[0]
和[1]
,而不是[2]
在第一次迭代中,您可以访问stringChars[index2]
和index2=length
其中length=myString.length()
。因此,索引AutofBoundException
。仔细阅读您的代码并分析您需要的索引。创建一个小示例,使用一些小的打印语句调试代码,并查看您实际使用的索引
下面是一个更紧凑的反向算法的示例:
char[] input = ...
// Iterate in place, from both sides at one time
int fromFront = 0;
int fromEnd = input.length - 1;
while (fromFront < fromEnd) {
// Swap elements
char temp = input[fromEnd];
input[fromEnd] = input[fromFront];
input[fromFront] = temp;
fromFront++;
fromEnd--;
}
它应该是index2=length-1;
记住数组是从0…length-1try索引的,使用这个:length=myString.length()1,顺便提一下,如果我能给出一个建议,你不需要两个数组来做这个。只要使用一个数组,带有两个索引变量,然后交换第一个和最后一个字符,然后将第二个和第二个字符互换到最后一个字符等等。
char[] input = ...
char[] reversedInput = new char[input.length];
// Reversely iterate through source
int forwardIndex = 0;
for (int i = input.length - 1; i > 0; i--) {
reversedInput[forwardIndex] = input[i];
forwardIndex++;
}