Java程序反转字符串
时间:2020-01-09 10:35:33 来源:igfitidea点击:
在这篇文章中,我们将看到一个Java程序来就地反转String。如果按照就地算法的定义进行操作,它不会使用任何多余的空间,那么输入数据本身的空间将用于修改数据并产生输出。
现在我们知道String在Java中是不可变的,因此对原始String的任何修改都会导致创建新的String对象。这与就地算法不同,后者要求我们不要使用新的数据结构来产生输出。因此,从技术上讲,不可能在Java中使用就地算法来反转字符串,但是可以进一步扩展技术性,我们可以说原始字符串(如果不再使用)会被垃圾回收,无论如何我们都将保留单个字符串对象。牢记这一点,我们可以编写一个Java程序来就地反转String。
如果允许使用其他类,则可以使用两种方法来编写此程序,然后可以使用StringBuilder类及其方法。如果不允许使用任何Java库,则可以通过迭代String来实现。
使用StringBuilder反转字符串
这里要注意的一件事是,我们不需要迭代整个String,对于大小为n的String,我们只需迭代n / 2个String。由于在每个迭代中交换了第一个和最后一个字符,第二个和倒数第二个等等,因此在到达中间字符时,字符串已经反转。
下图显示了相同的内容
public class ReverseString {
public static void main(String[] args) {
String str = "Hello World";
reverseString(str);
}
static void reverseString(String str) {
StringBuilder sb = new StringBuilder(str);
int n = sb.length();
char temp;
for (int i = 0; i < n / 2; i++) {
temp = sb.charAt(i);
sb.setCharAt(i, sb.charAt(n - i - 1));
sb.setCharAt(n - i - 1, temp);
}
System.out.println("Reversed String- " + sb.toString());
}
}
输出:
Reversed String- dlroW olleH
如我们所见,该程序StringBuilder类及其setCharAt()方法用于反转String。
使用字符数组反转字符串
每个String都在内部存储为char数组,因此我们可以获取该数组并将其反转,从而在此过程中反转String。该程序类似于在Java中就地反转数组。
public class ReverseString {
public static void main(String[] args) {
String str = "Hello World";
reverseString(str);
}
static void reverseString(String str) {
char[] charArr = str.toCharArray();
int n = charArr.length;
char temp;
for (int i = 0; i < n / 2; i++) {
temp = charArr[i];
// Swapping
charArr[i] = charArr[n - i - 1];
charArr[n - i - 1] = temp;
}
String rstr = new String(charArr);
System.out.println("Reversed String- " + rstr);
}
}
输出:
Reversed String- dlroW olleH
尽管反转的整个过程都是使用输入String(内部存储为char数组)本身的空间完成的,但是使用反转的char数组会创建一个新的String。以原始字符串将被垃圾回收为例,可以说我们只剩下一个对象。

