Java面向对象第六天(-----适配器-----字符串方------)

概述: 

   适配器模式是结构型设计模式之一;在不修改原来两块代码的情况下,将两个不兼容的类同和在一起;通过转换使他们协作起来.

 定义:

 适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原来因为接口不匹配无法在一起工作的两个类一起工作

使用:

 1. 系统需要使用现有的类,而此类接口不符合系统的需要,即几口不兼容;

 2.需要建立一个可以重复使用的类,用于关联彼此没有太大关联的一些类;

3.需要一个同一的输出接口,而输入端类型不确定;

适配器三种模式

 1.类适配器  (没有关系的类和接口产生联系,可以拓展增加已有代码的复用性)(过程中需要用到继承) 

 2. 对象适配器(使用对象来进行连接:来拓展功能)

实例:类适配器:

//类适配器
 class IPhone7{   //没有关系的类;
        //听音乐的方法;
     public void  listenMusic(){
         System.out.println("直接使用充电口进行充电")

   }
}  

//目标接口里面包含一个抽象方法
 
interface Target(){
      //这是目标接口
     public abstract void connection();
}

我们想在不改变上面类和接口的情况下 ,让上面的类和接口产生关系;

这时我们可以通过使用一个第三方的类(适配器)来实现这个;

class Adapter extends IPhone7 implements Target{
 //实现重写抽象方法;
    @Override
    public void connction(){
          System,out.println("使用转接头");
      //调用父类的方法;使用充电口进行充电
      super.listenMusic();
    }

}

下面开始试验;

 public static void main(String[] args){
       //使用适配器的类
     Target iphone7 = new Adapter();
     iphone7.connection(); //这是接口,接口的作用就是在子类中实现父类的抽像方法; 如果Adapter 要调用自己特有方法;要向下转型;
//打印结果
使用转接头
直接使用充电口进行充电
  
}

2.缺省适配器;

缺省适配器(Default Adapter):缺省适配模式的核心。它实现Target角色接口,为所有方法提供空的实现(也就是{}的空实现)。d

//目标接口
interface JSF{
	//跑步
	 public abstract void paoBuJi();
	 //卧推
	 public abstract void woTui();
	 //哑铃
	 public abstract void yaLing();
}
//让这个抽象适配器类来实现接口中的所有抽象方法空实现;
abstract class MyAdapter implements JSF {// 实现类必须实现所有抽象方法
	// 抽象类可以没有抽象方法;
	@Override
	public void paoBuJi() {

	}

	@Override
	public void woTui() {

	}

	@Override
	public void yaLing() {

	}

//这时候我们就可以继承这个适配器类,选择性的重写适配器类中的方法;(继承可以没有方法的重写吗?可以的;)

// 继承: 子类方法里面可以调用父类方法里面可以;

class WL extends MyAdapter{
	//重写适配器类的方法
	@Override
	public void paoBuJi() {
		System.out.println("跑步半小时");
	}
}

1.字符串

1. 字符串是常量;

 2.字符串和数组之间是怎样进行转换的;

//字符串转换成数组;
  String string = " abc def ";
 char [] charArray = string.toCharArray();
//数组转换成字符串;
String newstring = new String(charArray);

3.关于字符串的一些特点;

//s2的创建方式,相当于在方法区的常量池中,创建字符串
 String s2 = "abc";
//s3的创建相当于在堆内存中开辟一片新的空间;
 String s3= new String("abc")
          String s1 = "liushangkuabc";
          s1 = "wangl";
          System.out.println(s1);
//修改的是字符串的地址,指向了不同的地址,而不是字符串本身被修改了;
//看系统方法的时候,但凡是拼接和截取等操作字符串的一类方法;都是带返回值的,说明返回的是一个新的字符串
         String s4 = "abc";
        // == 对象的话 比的是地址,不是对象比的是值;
         System.out.println(s2==s4);//比的是地址
         //equals 把两个字符串变成字符数组 一位一位的比较,比较的是内容;
         System.out.println(s2.equals(s4));
         System.out.println(s2==s3);
         //s2和s3 有什么区别?
         //s2是一个对象  s3是两个对象;"abc" 和 new 出来的对象;

2.字符串一些常用的方法;

获取:  1.获取字符串中单个字符: charAt(index);    

             2.获取索引值 :indexOf(' 字符')  ;indexof( '字符', 4),前一个参数代表要寻找的字符,后一个数字代表从第几位开始找;

                    indexof("字符串");看字符串第一个字母所在的位置;

String s1 = "wanglong";
		 //注意不要越界;
	    char c = s1.charAt(1);
	    System.out.println(c);
	    
	    //获取索引 只能找第一个
	    String s2 = "wanglong";
	   int index= s2.indexOf('g');//可以传字符和数字例如97;返回1;w的ascii;
	   System.out.println(index);//如果穿数字就是传入的ascii;
	   
	   //从传入的索引这一位开始查找;
	   //[0.0) 留头舍尾;       //如果传入一个没有的字符 x 返回-1;
	   int index1 =  s2.indexOf('g',6);//前一个参数要找的字符 5和4 返回时有区别的;;
	   System.out.println(index1);
	   
	   //传入字符串,查找相应的角标;
	   int index2 = s2.indexOf("long"); //传入 olong 返回-1;
	   System.out.println(index2);

判断:

           1. contains("字符串");  判断包含,判断字符串中是否有该字符串;

           2. startsWith("字符串"): 判断前缀;

           3 endsWith("字符串"); 判断后缀;

           4 equals("字符串2") ;判断两个字符串是否相同;

           5 equalsIgnoreCase("字符串2"); 判断两个字符串忽略大小写相等;

           6 toLowerCase(); 字符串转小写;

           7 toUpperCase();字符串转小写;

实例: 

         

		String string = "www.baidu.com";
		// 判断包含;往里面穿字符串;方法的参数是一个接口;凡是继承这个接口的都可以往里面穿;
		boolean rel1 = string.contains("baidu");
		System.out.println(rel1);
		
		// 判断前缀
		boolean rel2 = string.startsWith("www");
		System.out.println(rel2);
		
		// 判断后缀 .txt.jpg.jpeg.png 可以判断照片后缀;
		boolean rel3 = string.endsWith("com");
		System.out.println(rel3);

		// 判断两个字符串相等
		boolean rel4 = string.equals(rel3);
		
		// 判断两个字符串忽略大小写相等;
		boolean rel5 = string.equalsIgnoreCase("Wanglong");
		System.out.println(rel5);
		
		// 字符串转小写
		String s6 = string.toLowerCase();
		System.out.println(s6);
		
		// 字符串转大写
		String s7 = string.toUpperCase();
		System.out.println(s7);

替换 -- 分割--截取-- 比较- -去空格--字符串字符数组--字符串是否为空-

//替换字符和字符串 replace(''),replace("")
 private static void fun1替换() {
		// 替换字符
		String string = "wanglong";
		String s1 = string.replace('w', 'l');
		System.out.println(s1);
         //替换字符串
		String s2 = string.replace("wang", "jiu");
		System.out.println(s2);
	}
}
//分割:  split("填入分割符")
private static void fun2分割() {
		// 字符串分割 返回值是数组 String[];
		// 使用转义符号进行a.b.c \\. 进行分割;
		String string = "wanglong,peng,liu";
		String[] s1 = string.split(","); // ( \\. )分割 或者(g)分割;
		// System.out.println(Arrays.toString(s1));

		// 增强for 循环;(专门用来遍历的) //for e 快捷键;
		// for(容器中数据类型:遍历容器) {}
		for (String sy : s1) {
			// String s相当于表示容器中的每一个元素 ;
			System.out.println(sy);

		}
	}
//获取子字符串; substring(index),
 // substring(start,end)
private static void fun3截取substring() {
		// 获取子字符串
		String s = "wanglong";
		//从传入的这一位开始截取(包括3);
		String s1 = s.substring(3);
		System.out.println(s1);
		
		//[0,3)留头舍弃尾巴;[0,2];
		String s2 = s.substring(0, 3);
		System.out.println(s2);
	}
//去空格  trim();
 String string = " abc def ";
		String s1 = string.trim();
		System.out.println(s1);
//字符串比较; compareTo(字符串2)
String s2 = "abcAB";
		String s3 = "Ab";
		// 相等返回的是0; 返回正值前面大;返回负数前面小;
		// 字符串不一样的时候按照ascii马表返回字符串差值;b 98;
		// 长度不一样的时候 返回的是位数的差值;
		// 一位一位的进行比较,字符不一样就做差值;ascii差值;
		int num = s2.compareTo(s3);
		System.out.println(num);

private static void fun5字符串字符数组转化() {
		//把字符数组转化成字符串;
		char [] array = {'w','a','n','g'};
		//使用构造方法转化;
		String string = new String(array);
		System.out.println(string);
		
		//字符串转换成字符数组; // tocharArray();
		String s1 = "wanglong";
		char[] charArray = s1.toCharArray();
		for (char c : charArray) {
			System.out.println(c);
		}
	}
//判断字符串是否为空 isEmpty
		String string = "";
		boolean rel = string.isEmpty();
/*  1. abc def  字符串反转
 *      1.转化成字符数组;
 *      2.计算换位次数;
 *      3.array[i] 和array[length-1-i]
 * 
 * 
 *  2.   abc def   字符串去空格;
 *      1.只要找出开始和结束的索引,就可以了;
 *      2.用charAt(start),
 * 
 *  3.  * "www" 
 *      在 "wwwasdwwwsnfjwwwsnsdkwwwjsd"
 *      string.indexOf(); 
 *  
 *  4. * 打印下面两个字符串 中相同的 最大子字符串
 *      asakjfahellosdlmkasklhka
 *      mcnvbsehellolssphkp
 * 
 */
public class Demo练习题 {
	public static void main(String[] args) {
		// fun1字符串反转();
		// fun将字符串找坐标去空格();
		// www所在的字符串位置();
		// 没见过就是不会;
		String s1 = "sakjfahellosdlmkasklhka";
		String s2 = "mcnvbsehellolssphkp";
		// 先以短的字符串为参照物进行查找;
		// 声明循环增量
		int i = 0;
		while (i < s2.length()) {
			// 为了找到开始的索引和结束的索引;
			int start = 0;
			// 结束的索引;
			// length-0;
			// length-1;
			// length-i;
			int end = s2.length() - i;
			// 截取最大字串;
			while (end < s2.length()) { // 不能越界;end不能一直移动;
				// 截取出来所有的字串;
				String substring = s2.substring(start, end + 1);
				System.out.println(substring);

				// 跟s1这个字符串进行比对;判断包含;
				if (s1.contains(substring)) {
					// 第一个进来的就是最大字串;
					System.out.println(substring);
					// 结束该方法;
					return;
				}

				// 让开始和结束的坐标 向前移动;
				start++;
				end++;
			}
			i++;
		}

	}

	private static void www所在的字符串位置() {
		
		String s1 = "wwwasdwwwsnfjwwwsnsdkwwwjsd";
		//显然是有循环;哪个循环好;
		// 把声明的变量全声明一遍;
		String key = "www";
		// 声明一个索引
		int index = 0;
		// 声明一个
		int count = 0;
		//循环截取字符串;
		//判断该字符串中是否有该查找的字符创;
		while (s1.contains(key)) {
			//查找www在字符串中的索引;
			index = s1.indexOf(key);
		    s1 = s1.substring(index+key.length());
		    count++;
		}
		System.out.println(count);
	}

	

	
	private static void fun将字符串找坐标去空格() {
		
		// fun错误写法();
		String string = "  abc def ";
		int start = 0;
		int end = string.length() - 1;
		// 计算开始坐标;
		while (string.charAt(start) == ' ' && start < end) {
			// 从前开始一位一位往后寻找;
			start++;
		}
		// 计算结束坐标
		while (string.charAt(end) == ' ' && start < end) {
			// 从最后一位开始寻找;
			end--;
		}
		// 截取字符串;
		String substring = string.substring(start, end + 1);
		System.out.println(substring);
	}



	private static void fun1字符串反转() {
		String string = "  abc def  ";
		// 字符串转换成数组;
		char[] charArray = string.toCharArray();
		int num = charArray.length / 2;
		for (int i = 0; i < num; i++) {
			char temp = charArray[i];
			charArray[i] = charArray[charArray.length - 1 - i];
			charArray[charArray.length - 1 - i] = temp;
		}
		// System.out.println(Arrays.toString(charArray));打印数组;
		// 字符数组转换成字符串;
		String newString = new String(charArray);
		System.out.println(newString);
	}
}







     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值