字符串反转输出的方法

小疯之前遇到一个字符串反转输出的问题,然后找到几种方法。

首先比较简单的情况就是一串字符反着输出,不用考虑其他,这种比较简单:

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] + " ");
		}

个人感觉方法一更严谨一点,因为第二种会多输出一个末尾空格,当然如果代码再优化一点这个可以实现的。

转载于:https://my.oschina.net/yexiaofeng/blog/2051805

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值