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。以原始字符串将被垃圾回收为例,可以说我们只剩下一个对象。