Day12Java基础学习

Day12

  1. 常见对象(Scanner的概述和方法介绍)
    (1) Scanner的概述
    (2) Scanner的构造方法原理
    Scanner(InputStream source)
    System类下有一个静态的字段:
    public static final InputStream in;标准的输入流,对应着键盘录入。
    (3) 一般方法
    hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx;
    nextXxx() 获取下一个输入项。Xxx的含义和上一个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符。

  2. 常见对象(Scanner 获取数据出现的小问题及解决方案)
    (1) 两个常用方法:
    public int nextInt ():获取一个int类型的值
    public String nextLine():获取一个String类型的值
    (2) 案例演示
    先演示获取多个int值,多个String值的情况;
    再演示先获取int值,然后获取String值出现问题;
    问题解决方案:
    第一种:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
    第二种:把所有的数据都先按照字符串获取,然后要什么,你就对应转换成什么。

package come.heima.scanner;

import java.util.Scanner;

public class Demo2_Scanner {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		/*System.out.println("请输入第一个整数:");
		int i = sc.nextInt();
		System.out.println("请输入第二个整数:");
		int j = sc.nextInt();
		System.out.println("i = " + i + ", j = " + j);*/
		
		/*System.out.println("请输入第一个字符串:");
		String line1 = sc.nextLine();
		System.out.println("请输入第二个字符串:");
		String line1 = sc.nextLine();
		System.out.println("line1 = " + line1 + ",line2 = " + line2);*/
		
		/*
		 * nextInt()是键盘录入整数的方法,当我们录入10的时侯
		 * 其实就是在键盘上录入10和\r\n,nextInt()方法只获取10就结束了
		 * nextLine()是键盘录入字符串的方法,可以接收任意类型,但是他凭什么能获取一行呢?
		 * 通过\r\n,只要遇到\r\n就证明一行结束了。
		 *
		 */
		
		/*System.out.println("请输入第一个个整数:");
		int i = sc.nextInt();
		System.out.println("请输入第二个字符串:");
		String line2 = sc.nextLine(); //将nextInt()和nextLine()和其一起用,这一句录入不进去
		System.out.println("i = " + i + ",line2 = " + line2);*/
		
		/*
		 * 解决方法1:创建两次对象,但是浪费空间
		 * 解决方法2:键盘录入的都是字符串,都有nextLine()放法,后面将会学习将整数字符串转换成整数的方法
		 *
		 */
		int i = sc.nextInt();
		Scanner sc2 = new Scanner(System.in);
		String line = sc2.nextLine();
		
		System.out.println(i);
		System.out.println(line);
	}
}
  1. 常见对象(String类的概述)
    (1) String类的概述
    通过JDK提供的API,查看String类的说明
package com.heima.string;

public class Demo1_String {
	public static void main(String[] args) {
		String str = "abc"; //”abc"可以看成一个字符串对象
		str = "def";   //当把def赋值给str时,原来的“abc”就变成了垃圾
		System.out.println(str); //String 类重写了toString方法,返回的是该对象本身
		
	}

}

可以看到这样的两句话。
A:字符串字面值”abc”也可以看成是一个字符串对象。
B:字符串是常量,一旦被赋值,就不能被改变。
4. 常见对象(String类的构造方法)
(1) 常见构造方法
public String():空构造;
public String(byte[] bytes):把字节数组转化成字符串。
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串;
public String(char[] value):把字符数组转化成字符串;
public String(char[] value,int index,int count):把字符数组的一部分转成字符串;
public String(String originals):把字符串常量值转成字符串。
(2) 案例演示:演示String类的常见构造方法。

package com.heima.string;

public class Demo2_StringCon {
	
		public static void main(String[] args) {
			String s1 = new String();  //空构造,实际就是创造空字符串
			System.out.println(s1);
			
			byte[] arr1 = {97,98,99};
			String s2 = new String(arr1); //解码,将计算机读的懂的转换成我们读的懂得。
			System.out.println(s2);
			
			byte[] arr2 = {97,98,99,100,101,102};
			String s3 = new String(arr2,2,3); //将arr2字节数组从2索引开始转换3个
			System.out.println(s3);
			
			char[] arr3 = {'a','b','c','d','e'}; //将字符数组转换成字符串
			String s4 = new String (arr3);
			System.out.println(s4);
			
			String s5 = new String(arr3,1,3);//将arr3字符数组从12索引开始转换3个
			System.out.println(s5);
			
			String s6 = new String("heima");
			System.out.println(s6);
			
		}
}
	
  1. 常见对象(String类的常见面试题)
    (1) 判断定义String类型的s1和s2是否相等
    String s1 = “abc”; //String类为引用数据类型
    String s2 = “abc”; //常量池中如果没有该字符串对象就重新创建一个,有就直接用
    System.out.println(s1 == s2); //true,因为s1和s2指向同一个地址
    System.out.println(s1.equals (s2)); //true
    (2) 下面这句话在内存中创建了几个对象?
    String s1 = new String (“abc”);
    答:创建两个对象,一个在常量池中,一个在堆内存中,两个地址值不同
    (3) 判断定义为String类型的s1和s2是否相等
    String s1 = new String (“abc”);
    String s2 = “abc”;
    System.out.println(s1 == s2); //false,因为s1指向堆中的地址,s2指向常量池中的地址
    System.out.println(s1.equals (s2));//true
    在这里插入图片描述

(4) 判断定义为String类型的s1和s2是否相等。
String s1 = ‘a’ + ‘b’ + ‘c’;//在编译时就变成了”abc”
String s2 = “abc”;
System.out.println(s1 == s2); // true,因为Java中有常量优化机制,
System.out.println(s3.equals (s2));//true,内容相等
(5) 判断定义为String类型的s1和s2是否相等
String s1 = "ab:;
String s2 = “abc”;
String s3 = s1 + “c”;
System.out.println(s3 == s2);//false,
System.out.println(s3.equals (s2));//true,内容相同
在这里插入图片描述
6. 常见对象(String类的判断功能)
(1) String类的判断功能
boolean equals(Obiect obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
boolean constrains(String str):判断大字符串是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空

(2) ” ”和null的区别
“ ”时字符串常量,同时也是一个String类的对象,既然是对象当然也可以调用String类中的方法;
null是空常量,不能调用任何方法否则会出现空指针异常,null可以给任意的引用数据类型赋值。

  1. 常见对象(模拟用户登录)
    (1) 案例演示
    需求:模拟登录,给三次机会,并提示还有几次。
    用户名和密码都是admin.
package com.heima.test;

import java.util.Scanner;

public class Test1 {
	/*
	 * 需求:模拟登录,给三次机会,并提示还有几次。
	用户名和密码都是admin.
	分析1:模拟登陆,需要键盘录入,Scanner
	2.给三次机会,需要循环,for
	3.并提示有几次,需要判断,if
	 */
	public static void  main (String[] args) {
		Scanner sc = new Scanner(System.in); //键盘录入对象
		
		for(int i = 0; i < 3; i ++) {
		System.out.println("请输入用户名");
		String username = sc.nextLine();  	//	键盘录入的用户名存储在userName中
		System.out.println("请输入密码:");
		String password = sc.nextLine();   	//	将键盘录入密码存储在password中
		
		//如果是字符串常量和字符串变量比较,通常都是字符串常量调研方法,将变量当作参数传递,防止空指针异常
		if("admin".equals(username) && "admin".equals(password)) {
			System.out.println("欢迎" + username + "登录");
			     break;  //跳出循环
		}else {
			if(i == 2) {
				System.out.println("您的错误次数已到,请您明天再来");
			} else {
			System.out.println("录入错误,您还有" + (2-i) + "次机会");
			}
		}
	
		}
	}
}
  1. 常见对象(String类的获取功能)
    (1) String类的获取功能
    int length():获取字符串长度
    char charAt(int index):获取指定索引位置的字符
    int indexOf(int ch):返回指定字符在此字符串中的第一次出现处的索引。
    int indexOf(String str):返回指定字符串在此字符中第一次出现处的索引。
    int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
    int indexOf(String str,int fromIndex):返回指定字符串在此字符串从指定位置后第一次出现处的索引。
    lastIndexOf
    String substring(int start):从指定位置开始截取字符串,默认到末尾。
    String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
package com.heima.string;

public class Demo5_StringMethod {
	public static void main(String[] args) {
		//面试题
		String s = "woaiheima";
		s.substring(4);       //substring会产生一个新的字符串,需要将新的字符串记录才能使用
		System.out.println(s); //打印的还是"woaiheima"
	}

	private static void Demo4() {
		String s1 = "heimawudi";
		String s2 = s1.substring(5);//从第5个开始截取,包含第五个
		System.out.println(s2);
	  
		String s3 = s1.substring(0,4);  //包含头,不包含尾,左闭右开
		System.out.println(s3);
	}

	private static void Demo3() {
		String s1 = "woaiheima";
		int index1 = s1.indexOf('a',3); //从指定位置开始向后找
		System.out.println(index1);
		
		int index2 = s1.lastIndexOf('a',7);//从指定位置向前找
		System.out.println(index2);
	}

	private static void Demo2() {
		String s1 = "heima";
 		int index = s1.indexOf('a');   //参数接收的是int类型的,传递char类型的会自动提升
		System.out.println(index);
		
		int index2 = s1.indexOf('z');   //如果不存在,返回值就为-1
		System.out.println(index2);
		
		int index3 = s1.indexOf("ma");   //获取字符串中第一个字符出现的位置
		System.out.println(index3);
		
		int index4 = s1.indexOf("ia");   //如果不是连着的字符,系统找不到对应的,会返回-1
		System.out.println(index4);
	}
  1. 常见对象(字符串的遍历)
    (1) 案例演示:
    需求:遍历字符串
package com.heima.test;

public class Test2 {

	public static void main(String[] args) {
		String s = "heima";
		
		for(int i = 0;i < s.length(); i++) {      //通过for循环获取到字符串中每个字符的索引
			char c = s.charAt(i);
			System.out.println(c);		//通过索引获取每一个字符
		}

	}

}
  1. 常见对象(统计不同类型字符个数)
    (1) 案例演示:
    需求:统计一个字符串大写字母字符,小写字母字符,数字字符出现的次数。
    ABCDEabcd123456!@#$%^
package com.heima.test;

public class Test3 {
	/*ABCDEabcd123456!@#$%^
	 * 需求:统计一个字符串大写字母字符,小写字母字符,数字字符出现的次数。
	 * 分析:字符串是由字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符
	 * 如果包含就让计数器变量自增
	 */

	public static void main(String[] args) {
		String s = "ABCDEabcd123456!@#$%^";
		int big = 0;
		int small = 0;
		int num = 0;
		int other = 0;
				
		//1.获取每一个字符,通过for循环遍历
		for(int i = 0;i < s.length();i++) {
			char c = s.charAt(i);       //通过索引获取每一个字符
			 //2.判断字符是否在这个范围
			if(c >= 'A' && c <= 'Z')	{  //如果满足大写字母的范围,就让其对应的变量自增
				big++;
			}else if(c >= 'a' && c <= 'z' ) {
				small++;
			}else if(c >= '0' && c <= '9') {
				num++;
			}else {
				other++;
				
			}
		}
	//3.打印每一个计时器的结果
		System.out.println(s + "中大写字母有:" + big + "个,小写字母有:" + small + 
				"个,数字字符:" + num + "个,其他字符有:" + other + "个");
				
	}

}

  1. 常见对象(String类的转换功能)
    (1) String的转换功能:
    byte[] getBytes():把字符串转化为字节数组。
    char[] toCharArray():把字符串转换为字符数组。
    static String valueOf(char[] chs):把字符数组转成字符串。
    static String valueOf(int i):把int类型的数据转成字符串。
    注意:String类的valueOf方法可以把任意类型的数据转成字符串。

String toLowerCase():把字符串转成小写(了解)
String toUpperCase():把字符串转成大写
String concat(String str): 把字符串拼接。

package com.heima.string;

import com.heima.bean.Person;

public class Demo6_StringMethod {

	public static void main(String[] args) {
		String s1 = "heiMA";
		String s2 = "chengxuYUAN";
		String s3 = s1.toLowerCase();    
		String s4 = s2.toLowerCase();
		
		System.out.println(s3);
		System.out.println(s4)
		
		System.out.println(s3 + s4);   //用+拼接更强大,可以用字符串与任意类型相加
		System.out.println(s3.concat(s4)); //用concat方法调用着和传入者都必须是字符串
		
		

	}

	private static void Demo3() {
		char[] arr = {'a','b','c'};
		String s = String.valueOf(arr);  //底层是由String类的构造方法完成的
		System.out.println(s);
		
		String s2 = String.valueOf(100);//将100转换成字符串
		System.out.println(s2 + 100); //字符串与其他类型用+连接都会变成字符串类型
		
		Person p1 = new Person("张三",23);
		System.out.println(p1);
		String s3 = String.valueOf(p1); //调用的是对象的toString方法
		System.out.println(s3);
	}

	private static void Demo2() {
		String s = "heima";
		char[] arr = s.toCharArray();  //将字符串转换成字符
		
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
			
		}
	}

	private static void Demo1() {
		String s1 = "abc";
		byte[] arr = s1.getBytes();
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
			
		}
		
		String s2 = "你好你好";
		byte[] arr2 = s2.getBytes();   //通过gbk码表把字符串转换成字节数组
		for (int i = 0; i < arr2.length; i++) {   //gbk码表一个中文代表两个字节
			System.out.print(arr2[i] + " "); 	//	编码:把我们看的懂的转换成计算机看的懂的
												//gbk码表特点:中文的第一个字节肯定是负数
		}
		
		String s3 = "琲";
		byte[] arr3 = s3.getBytes();
		for (int i = 0; i < arr3.length; i++) {
			System.out.println(arr3[i] + " ");
		}
	}

}

  1. 常见对象(按照要求转换字符)
    (1) 案例演示:需求,把一个字符串的首字母转化成大写,其余转化成小写。
package com.heima.test;

public class Test4 {
   //链式编程:只要保证每次调用完方法返回的是对象,就可以继续使用
	public static void main(String[] args) {
		String s = "woaiHEImaniaima";
		String s2 = s.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase());
		System.out.println(s2);

	}

}
  1. 常见对象(把数组转成字符)
    (1)案例演示
    需求:把数组的数据按照指定格式拼接成一个字符串
    举例:int[] arr = {1,2,3}
    输出结果:”[1, 2, 3]”
package com.heima.test;

public class Test5 {
/*
 * 举例:int[] arr = {1,2,3}
输出结果:”[1, 2, 3]”
分析:1:需要定义一个字符串"["
	2:遍历数组获取每一个元素
	3:用字符串与数组中的元素进行拼接
 */
	public static void main(String[] args) {
     int[] arr = {1,2,3};
     String s = "[";   //定义一个字符串来与数组中的元素进行拼接
       for (int i = 0; i < arr.length; i++) {  //{1,2,3}
		if(i == arr.length - 1) {
			s = s + arr[i] + "]";
		}else {
			s = s + arr[i] + ", ";  
		}
    	   
	  } 
       System.out.println(s);
	}

}
  1. 常见对象(String类的其他功能)
    (1) String的替换功能及案例演示
    String replace (char old,char new)
    String replace(String old,String new)
    (2) String的去除字符串辆空格及案例演示
    String trim()
    (3) String的按字典顺序比较两个字符串及案例演示
    int compareTo(String str)
    int compareToIgnoreCase(String str)
package com.heima.string;

public class Demo7_StringMethod {

	public static void main(String[] args) {
		 String s1 = "abc";
		 String s2 = "bcd";
		 
		 int num = s1.compareTo(s2); //按顺序比较两个字符串,按照码表值进行比较
		 System.out.println(num);
		 
		 String s3 = "黑";
		 String s4 = "马";
		 int num1 = s3.compareTo(s4);
		 System.out.println('黑' + 0);  //查找的是unicode码表
		 System.out.println('马' + 0);
		 System.out.println(num1);
		 
		 String s5 = "heima";
		 String s6 = "HEIMA";
		 int num3 = s5.compareTo(s6);
		 System.out.println(num3);
		 
		 int num4 = s5.compareToIgnoreCase(s6); //不区分大小写,比较得0
		 System.out.println(num4);
	}

	private static void Demo2() {
		String s = "   hei   ma   ";
		String s2 = s.trim();  //去掉两端的空格
		System.out.println(s2);
	}

	private static void Demo1() {
		String s = "heima";
		String s2 = s.replace('i', 'o');//用O替换i
		System.out.println(s2);
		
		String s3 = s.replace('z', 'o');//z不存在,保留原字符不变
		System.out.println(s3);
		
		String s4 = s.replace("ei", "ao");
		System.out.println(s4);
	}

}

  1. 常见对象(字符串反转)
    (1) 案例演示
    需求:把字符串反转
    举例:键盘录入”abc” -------输出结果”cba”
package com.heima.test;

import java.util.Scanner;

public class Test6 {
	/*
	 * 需求:把字符串反转
	       举例:键盘录入”abc” -------输出结果”cba”
	分析:
	1.通过键盘录入获取字符串Scanner
	2.将字符串转换成字符数组
	3.倒着遍历字符数组,并再次拼接成字符串
	4。打印
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); //创建键盘录入对象
		System.out.println("请输入一个字符串");
		String line = sc.nextLine();
		
		char[] arr =  line.toCharArray(); //将字符串转换成字符数组
		String s2 = "";
		for(int i = arr.length-1; i >= 0 ; i--) { //倒着遍历字符数组
			s2 = s2 + arr[i];    				//拼接成字符串
		}
		System.out.println(s2);

	}
}
  1. 常见对象(在大串中查找小串出现的次数思路图解)
    (1) 画图演示
    需求:统计大串中小串出现的次数
    这里的大串可以根据自己的情况给出

  2. 常见对象(在大串中查找小串出现的次数代码实现)
    (1) 案例演示:统计大串中小串出现的次数。

package com.heima.test;

public class Test7 {
/*
 * 需求:统计大串中小串出现的次数
这里的大串可以根据自己的情况给出
分析:1:定义计数器变量,变量为0
	2:通过indexOf方法,在大串中找小串,如果没有返回-1程序结束;如果有返回索引值
	3:根据获取的索引值加上小串的长度,截取大串,将截取后的结果赋值给大串
	4:回到第二步,接着判断

 */
	public static void main(String[] args) {
		//定义大串
		String max = "woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma";
		//定义小串
		String min = "heima";
		
		//定义计数器变量
		int count = 0;
		//定义索引
		int index = 0;
		//定义循环,判断小串是否在大串中出现
		while ((index = max.indexOf(min)) != -1) {
			count++;          //计数器自增
			max = max.substring(index + min.length());//从发现重复项后截取大串
		
		}
		System.out.println(count);

	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值