Lesson_for_java_day12--String类的五个练习题

练习一:

package string.test;

/*
目的:写个程序,去除字符串两端的空格
思路:1、判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
		结束处判断空格也是如此。
	  2、当开始和结尾都判断到不是空格时,就是要获取的字符串。

步骤:1、创建一个类
	  2、创建一个方法,判断首位非空格处。
	  3、创建一个输出打印方法。
	  4、创建一个主函数,输入任意一个字符串,验证结果。
*/
class StringTest{
	public static void sop(String str){
		System.out.println(str);
	}
	
	public static String myTrim(String str){
		int start = 0;
		int end = str.length()-1;
		while(start <= end && str.charAt(start) ==  ' ')
			start++;
		while(end >= start && str.charAt(end) == ' ' )
			end--;
		return str.substring(start,end +1);
	}
	
	public static void main(String [] args){
		String s = "    dlsj  diid  kds    ";
		sop("(" + s + ")");
		s = myTrim(s);
		sop("(" + s + ")");
	}
}
练习二:

package string.test;
/*
目的:将一个字符串进行反转,将字符串中指定部分进行反转。
思路:1、曾经学习过对数组的元素进行反转。
	  2、将字符串变成数组,对数组反转。
	  3、将反转后的数组变成字符串。
	  4、只要将反转的部分的开始和结束位置作为参数传递即可。
*/

class StringTest2{
	public static String turnString(String str,int start,int end){
		char ch;
		String beginString;
		String tranform;
		String endString;
		if(start != 0)
			beginString = str.substring(0,start);
		else beginString ="";
		tranform = str.substring(start,end);
		if(end != str.length())
			endString = str.substring(end,str.length());
		else endString = "";
		char[] cha = tranform.toCharArray();
		for(int i = 0; i<=cha.length/2; i++){
			ch = cha[i];
			cha[i] = cha[cha.length-1-i];
			cha[cha.length-1-i] = ch;
		}
		tranform = new String(cha);
		return beginString + tranform + endString;	
	}
	
	public static void main(String args []){
		String s = "abcdefg";
		System.out.println(s);
		s = turnString(s,2,5);
		System.out.println(s);

	}
}
练习三:

package string.test;

/*
目的:获取一个字符串在另一个字符串中出现的次数.
"abkkcdkkefkkskk"
思路:
	1、定义个计数器。
	2、获取kk第一次出现的位置。
	3、从第一个出现位置后剩余的字符串中继续获取kk出现的位置。
	4、当获取不到时,计数完成。
*/

class StringTest3{
	public static void main(String[] args){
		String s = "abkkcdkkefkkskk";
		int count = getSubCount(s,"kk");
		System.out.println("kk出现的次数为:" + count);
	}
	
	public static int getSubCount(String s, String key){
		int count = 0;
		int index = s.indexOf("kk");
		while(index != -1){
			count++;
			index = s.indexOf("kk",index + key.length());
		}
		return count;
	}
}
练习四:

package string.test;

/*
目的:获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度依次递减的子串打印。
"abcwerthelloyuiodef"   "cvhellobnm"
思路:
	1、将短的那个子串按照长度递减的方式获取。
	2、将每获取到的子串去长串中判断是否包含,如果包含,已经找到。
*/
class StringTest4{
	public static void main(String[] args){
	
		String s1 = "abcwerthelloyuiodef";
		String s2 = "cvhellobnm";
		String s = getLongSubstring(s1, s2);
		if(s == "")
			System.out.println("没有共同子串");
		else
			System.out.println("两字符串的最大共同子串是:" + s);
	}
	
	//获取两字符串中最大共同子串
	private static String getLongSubstring(String s1, String s2){
		//判断两字符串的长串和短串
		String sMax, sMin;
		if(s1.length() <= s2.length()){
			sMin = s1;
			sMax = s2;
		}
		else{
			sMin = s2;
			sMax = s1;
		}
		
		//定义循环,对字符串进行判断(用短字符串比较长字符串)
		int end = sMin.length()-1;
		int start = 0;
		for(String sub ; end >= start ; end-- ){//每循环完一次,字符串长度减一
			//用固定长度的子串,从0位开始与长串字符进行比较,每次循环向前增加一位
			for(int i = start,e = end; e <=  sMin.length()-1; i++,e++){
				sub = sMin.substring(i,e+1);
				if(sMax.contains(sub)) return sub;
			}
		}
		return "";
	}
		
}

练习五:

package sonyi.exercise;

/*
	练习:定义一个字符串 str = "a,b,c;d,e,f,g;h,i,j,k,l";  把此字符串拆分成一个二维数组的字符串,并打印出来格式如下(3行): 用方法split()
    a b c
    d e f g
    h i j k l
 */
public class Exercise3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "a,b,c;d,e,f,g;h,i,j,k,l";
		String[] row = s.split(";");//对字符串进行第一次切割
		String[][] array = new String[row.length][];//开辟二维字符串数组行空间
		
		for(int i = 0; i < row.length; i++){
			array[i] = row[i].split(",");
		}
		
		/*
		for(int i = 0; i < row.length; i++){//遍历第一次切割后的字符串数组
			String[] col = row[i].split(",");//对字符串进行第二次切割
			array[i] = new String[col.length];//开辟二维字符串数组列空间
			for(int j = 0; j < col.length; j++){//遍历第二次切割后的字符串数组
				//System.out.print(col[j] + " ");//打印数组元素
				array[i][j] = col[j];//将数组元素赋值给二维字符串数组
			}
		}
		*/
		
		//打印二维字符串数组
		for(int i = 0; i < array.length; i++){
			for(int j = 0; j < array[i].length; j++){
				System.out.print(array[i][j] + "  ");
			}
			System.out.println();
		}
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值