字符小练习

package string;

class AdverArray{
	public static char[] adv(char[] arr,int start,int end){
		char[] ch=new char[arr.length];
		for(int i=0;i<start;i++){
			ch[i]=arr[i];
		}
		for(int i=0;i<=end-start;i++){
			ch[start+i]=arr[end-i];
		}
		for(int i=end+1;i<arr.length;i++){
			ch[i]=arr[i];
		}
	return ch;
}}
	
class ArrayLength{
	public static String maxL(String str1,String str2){
		if(str1.length()>str2.length())
			return str1;
		else 
			return str2;
	}
	public static String minL(String str1,String str2){
		if(str1.length()<str2.length())
			return str1;
		else 
			return str2;
	}
}



class String_Simulation{

	public static String trimSim(String s){//模拟trim去除两端空格
		int start,end,num=0;
		while(num<s.length()){
			if((s.charAt(num)!=' '))
			{
				break;
			}
			num++;
		}
		Sop.print(num);
		start=num;
		num=s.length()-1;
		while(num>=0){
			if((s.charAt(num)!=' '))
			{
				break;
			}
			num--;
		}
		Sop.print(num);
		end=num;
		return s.substring(start, end+1);
	}	

	public static void adverseString(String s,int start,int end){//反转指定字符串,end-start这段反转
		char[] ch=s.toCharArray();
		char[] ch2=AdverArray.adv(ch, start-1, end-1);
		String s1=new String(ch2);
		Sop.print(s1);
	}

	
	public static int counting(String str,String tar){//对指定序列计数
		int num=0,pos=0;
		while(pos<str.length()&&str.indexOf(tar, pos)!=-1){
			
			pos=str.indexOf(tar, pos)+tar.length();
			num++;
			
		}
		return num;
	}

	
	public static String maxSimilar(String str1,String str2){
		//找出两者最大公子序列:首先对短的分解,短的字符串的某个子列如果在str1中能找到匹配,其中最长的那个就是目标;
		//
		int mark=0,start=0,end=0;
		int t1l=str1.length();
		int t2l=str2.length();
		for(int i=t2l;i>0&&mark!=1;i--)
			for(int k=0;k+i<=t2l&&mark!=1;k++){
				if(str1.contains(str2.substring(k,k+i)))//if(str1.indexOf(str2.substring(k,k+i))!=-1)也行
					//子列的end是不包含在内的;所以在找子列的时候可以让end超出长度,end的最大值是(length-1)+1
					{
						start=k;
						end=k+i;
						mark=1;
					}			
			}
		if(mark==1)
			return str2.substring(start,end);
		else
			return "";
	}

}


public class StringPractise {

	public static void main(String[] args) {
		String s="  showmethemoney  ";
		String str1="showmethemoneybivalabidangjasdo";
		String str2="21234bivalabida3diauqpweqwieopiqwihoqiweuqw452";
		String_Simulation ss=new String_Simulation();
		System.out.println(str1.startsWith("show"));
		
		
		
		Sop.print(String_Simulation.trimSim(s));
		
		
		
		Sop.print(s);
		ss.adverseString(s, 3, 5);
		
		
		Sop.print("2"+"序列出现次数"+ss.counting(str2, "2"));
		
		
		String pub=ss.maxSimilar(ArrayLength.maxL(str1, str2),ArrayLength.minL(str1, str2));
		if(pub.isEmpty())
			System.out.println("无此序列");
		else
			Sop.print(pub);
		
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值