带有分隔符的字符串反转

Verson1.0 Build02(不好意思,第一段算法有问题,请看第二段。第一段算法的思想是遇到成对的间隔符才开始转换,若间被间隔的字段是奇数则会有问题,没考虑到末尾的情况,也就是有可能最后个需要转换的字符串没有执行,第二段算法处理了这个问题,若再有BUG请大家指出,多谢。)

字符串反转看似一道非常普通的算法但是深入研究却有趣味。见上一篇《字符串反转》。本篇的算法是带有分隔符的字符串反转问题(分隔符跳过)。详细见代码,共同讨论研究,请不吝评论!

JAVA实现,代码如下:


实现算法1:

package com.main;

public class Main {

	public static void main(String[] args){
		
		String str=" This is a reverse test ";
		ReversString reverse= new ReversString();
		System.out.println("befor reverse str ="+str);
		System.out.println("after reverse str ="+reverse.reverseStrExceptSeprator(str,' '));
	}
}


package com.main;

public class ReversString {
	
	public String reverseStrExceptSeprator(String _str,char seprator){
		
		int start=0;
		char[] charArray=_str.toCharArray();
		
		for(int i=0;i<charArray.length;i++){
			if(charArray[i]==seprator){
				if(i==0){
					start=i+1;
					continue;
				}
				
				int tempStart=start;
				int tempEnd=i-1;
				while(tempEnd>tempStart){
					char temp=charArray[tempStart];
					charArray[tempStart]=charArray[tempEnd];
					charArray[tempEnd]=temp;
					tempStart++;
					tempEnd--;
				}
				start=i+1;
			
			}else{
				continue;
			}	
		}
		return new String(charArray);
           }
	
}

算法2:思路同上一个,这里修复了一BUG(最后一个未被转换).

public String reverseStrExceptSeprator(String _str,char seprator){
		
		int start=0;
		char[] charArray=_str.toCharArray();
		
		for(int i=0;i<charArray.length;i++){
			if(charArray[i]==seprator||i==charArray.length-1){  //最后一个的问题
				if(i==0){
					start=i+1;
					continue;
				}
				
				int tempStart=start;
				int tempEnd;
				if(i!=charArray.length-1){
					tempEnd=i-1;
				}else{
				    tempEnd=i;
				}
				
				while(tempEnd>tempStart){
					char temp=charArray[tempStart];
					charArray[tempStart]=charArray[tempEnd];
					charArray[tempEnd]=temp;
					tempStart++;
					tempEnd--;
				}
				start=i+1;
			
			}else{
				continue;
			}	
		}
		return new String(charArray;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值