Java学习之有关String类的一些算法题一(题目来源------尚硅谷)

标题

Java学习之有关String类的一些算法题一(题目来源------尚硅谷)

1. 模拟一个trim方法,去除字符串两端的空格 

public class TrimTest {
	
	public static void main(String[] args) {
		TrimTest t=new TrimTest();
		t.test();
		
	}
	public void test() {
		int num1=0;//用于记录前端空格中最后一个的下标
		int num2=0;//用于记录后端空格中最后一个的下标
		int number=0;
		String str="  He llo ";
		char []Array=str.toCharArray();
		
		/*
		 * 寻找前端空格中最后一个空格的下标,找完之后使用break退出
		 */
		for(int i=0;i<Array.length;i++) {
			if(Array[i]==' ') {
				num1=i;
				number++;
			}else {
				break;
			}
		}
		/*
		 * 同理,寻找后端空格中往前最后一个空格的下标,找完之后使用break退出
		 */
		for(int j=Array.length-1;j>=0;j--) {
			if(Array[j]==' ') {
				num2=j;
				number++;
			}else {
				break;
			}
		}
		
		char Arr[]=new char[Array.length-number];//重新创建一个数组用来存放去掉前端和后端空格后的字符数组
		int i=0;
		for(int k=num1+1;k<num2;k++) {
			Arr[i++]=Array[k];     
		}
		String str1=new String(Arr);
		System.out.println(str1);
	}
}

2.将一个字符串进行反转,将字符串中指定部分进行反转,比如"abcdefg"转为"abfedcg"
public class FlipTest {
	public static void main(String[] args) {
		FlipTest f=new FlipTest();
		f.test();
	}
	public void test() {
		int firstlocation=0;
		int lastlocation=0;
		String str="abcdefg";
		char[] Array=str.toCharArray();
		char []Arr=new char[Array.length];//用于存放改变后的字符数组
		
		/*
		 * 找出子字符串中的起始字符串的位置和最后一个字符串的位置
		 */
		for(int i=0;i<Array.length;i++) {
			if(Array[i]=='c'&&Array[i+1]=='d'&&Array[i+2]=='e'&&Array[i+3]=='f') {
				firstlocation=i;
				lastlocation=i+3;
			}
		}
		int num=0;
		for(int i=0;i<firstlocation;i++) {  //存放被要求反转的子字符串前的字符
			Arr[num++]=Array[i];
		}
		for(int j=lastlocation;j>=firstlocation;j--) {  //存放反转后的子字符串
			Arr[num++]=Array[j];
		}
		
		for(int k=lastlocation+1;k<Array.length;k++) {   //存放被要求反转的字符串后面的字符
			Arr[num++]=Array[k];
		}
		String str1=new String(Arr);
		System.out.println(str1);
	}
}

3.获取一个字符串在另一个字符串中出现的次数
public class SearchTest {
	public static void main(String[] args) {
		SearchTest s=new SearchTest();
		s.test1();
		s.test2();
	}
	public void test1() {
		/*
		 * 下面这种做法可以解决已知的将要查找的较短的子字符串,但是如果将要查找的字符串是未知的或者要查找的字符串很长的话,这种方法将不适用
		 */
		int ans=0;
		String str="abkkcadkabkebfkabkskab";
		char []Array=str.toCharArray();
		for(int i=0;i<Array.length-1;i++) {
			if(Array[i]=='a'&&Array[i+1]=='b') {
				ans++;
			}
		}
		System.out.println(ans);
	}
	/*
	 * 利用String类的方法indexOf()
	 * int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
	 * int indexOf(String str,int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
	 * 注:如果未找到返回-1
	 */
	public void test2() {
		String str="abkkcabkadkebfkabkskab";
		String str1="ab"; //要求寻找的子字符串
		int end=0;        //用来记录已查询的字符串中的最后一个字符的位置
		int ans=1;        //因为要先查询第一个字符串的位置,所以ans的初始值为1
		int index=str.indexOf(str1);       //用于记录字符串第一次出现处的索引
		if(index==-1) {  //如果第一次查询就返回-1,说明长字符串中根本就没有要查找的字符串
			ans=0;
		}
		else {
			while(end<str.length()) { //循环结束的条件为end<str.length()
				index=str.indexOf(str1,index+str1.length()-1);  //第二个参数表示再次查找的起始位置
				if(index!=-1) {
					ans++;
				}
				end=index+str1.length();
			}
		}
		System.out.println(ans);
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值