小疯之前遇到一个字符串反转输出的问题,然后找到几种方法。
首先比较简单的情况就是一串字符反着输出,不用考虑其他,这种比较简单:
1、把字符串变成数组,然后倒序输出:
public void StringRevers(String str) {
// 将字符串str转化成字符数组
char[] arr = str.toCharArray();
for(int i = arr.length - 1; i >=0 ; i--) {
System.out.print(arr[i]);
}
}
当然这种可能不太合意,还可以把字符串倒序拼接:
public void StringRevers(String str) {
// 将字符串str倒序成字符串之后输出
for(int i = arr.length - 1; i >=0 ; i--) {
char c = str.charAt(i);
System.out.println(c);
}
}
使用StringBuffer自带方法来实现:
public void StringRevers(String str) {
if(str == null || str.length()<=1){
return str;
}
return new StringBuffer(str).reverse().toString();
}
不过上面方法只是实现了字符串反着输出但是对于句子就不适用了。
如果对于句子类的“I Love ShangHai”,对于这类我们如果想要实现“ShangHai Love I”的话,上面的方法就会发现实现不了。
1、首先将字符串反转然后根据单词在反转现象“ShangHai Love I”:
// 对于数组进行反转替换
public void swap(char[] arr, int begin, int end) {
while(begin < end) {
char temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
begin++;
end--;
}
}
public String swapWords(String str) {
char[] arr = str.toCharArray();
// 对于字符串数组进行反转替换
swap(arr, 0, arr.length - 1);
int begin = 0;
// 对于数组遍历在遇到空格' '时将之前的单词进行正常替换,如'evoL'换成'Love'
for (int i = 1; i < arr.length; i++) {
if (arr[i] == ' ') {
swap(arr, begin, i - 1);
begin = i + 1;
}
}
// 返回字符数组并字符串化(ShangHai Love I)
return new String(arr);
}
2、利用split方法将字符串句子根据单词生成单词数组:
public void StringRevers(String str) {
String[] sArr = str.split(" ");
List<String> list = new ArrayList<String>();
list = Arrays.asList(sArr);
Collections.reverse(list);
for(String word:list){
System.out.print(word+" ");
}
}
当然上面利用了list,也可以直接遍历数组输出:
public void StringRevers(String str) {
String[] sArr = str.split(" ");
for(int i = sArr.length - 1; i >= 0; i--){
System.out.print(sArr[i] + " ");
}
个人感觉方法一更严谨一点,因为第二种会多输出一个末尾空格,当然如果代码再优化一点这个可以实现的。