Day8 JAVA复习

十、API

1.1 API

常用的工具包:

  • java.lang:核心的工具类,不用手动导入,默认导入
  • java.util:工具类
  • java.sql:连接数据库相关的类
  • java.net:和网络编程相关 tcp
  • java.io:输入输出流
  • java.lang.reflect:和反射相关的api

1.2 String

1.2.1 字符串是不可变类

底层是一个char类型的数组 常量 private

String str="abc";//创建一个内存空间,str的地址指向abc的空间
str.concat("abc");,不改变str的地址指向,生成了一个新的内存空间放入abcabc
System.out.println(str);
//abc
public class Demo2 {
	public static void main(String[] args) {
		String str="abc";
		String str2=new String("abc");
	}
}

在这里插入图片描述
在这里插入图片描述

1.2.2 常用方法

public class Demo3 {

	public static void main(String[] args) {
		String str="hello";
		char c=str.charAt(0);//返回指定索引处的字符。返回的是字符类型
		System.out.println(c);
		
		String str2="abcde";
		int n=str2.compareTo(str);//底层代码,变成字符的数组,逐个比较,返回第一个不相同位置的字符对应的ACALL码的str2-str
		System.out.println(n);
		String str22="ab";
		int nn=str2.compareTo(str22);//当字符都相同且尾数相同,返回0,位数不同,返回位数差str2-str22
		System.out.println(nn);
		
		boolean b=str2.endsWith("de");//判断字符串的后缀
		System.out.println(b);
		b=str2.startsWith("bc");//判断字符串的前缀
		
		String str3="abCde";
		System.out.println(str2.equals(str3));//区分大小写
		System.out.println(str2.equalsIgnoreCase(str3));//不区分大小写
		
		System.out.println(str2.hashCode()==str3.hashCode());//hashCode
		
		int index=str.indexOf("bc");//返回找到第一个字符的位置,返回b的位置
		index = str3.indexOf("b", 1);//找指定位置的指定位置,找不到返回-1,找到返回位置
		System.out.println(index);
		
		index=str3.lastIndexOf("d");//从后往前
		index=str3.lastIndexOf("d", 3);//从后往前
		System.out.println(index);
		
		str3="hello";//字符串长度为0,返回true
		System.out.println(str3.isEmpty());
		str3.length();//获取字符串长度
		str3.substring(2);//截取字串
		str3.substring(0, 3);//包含头不包含尾,产生新串,在堆创建新空间
		
		char[] arr=str3.toCharArray();//表示字符串的字符数组
		System.out.println(arr);//字符串直接打印输出,输出字符串
		
		str3="AdfdfD";
		System.out.println(str3.toLowerCase());//返回小写
		System.out.println(str3.toUpperCase());//返回大写
		
		str3="     dd   ff      ";
		System.out.println(str3.trim());//去掉前后空格
		
		System.out.println(1+1+String.valueOf(1)+1+1);//各种数据类型换成字符串
	}
}

1.2.3 可以使用正则表达式的方法

正则表达式可以查阅CSDN的资料比较全
.matches(regex);判断是否是正则表达式,是返回true
.replanceAll(a,b);将a全部替换成b
.matches("(a)\1(b)\2");捕获组编号,判断是否有重复的元素
str.replaceAll("(.)\1+", “$1”);捕获组编号,消除重复(在一起的重复)
.split(“a”);将a的两边分隔开

//小数格式
	public static void test3(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入小数");
		String phone = sc.next();
		String regex="(0|[1-9][0-9]+)\\.([0-9]*)([0-9])([0-9&&[^0]]+)";
		phone.matches(regex);
		if(phone.matches(regex)){
			System.out.println("小数格式正确");
		}else{
			System.out.println("不正确");
		}
	}
	//替换
	public static void test4(){
		String str="gasdgnndagdsgdatmdagljasbgkahg";
		String regex="(nnd)|(tmd)";
		str=str.replaceAll(regex, "*");
		System.out.println(str);
	}
	
	//分割
	public class Demo1 {
	public static void test1(){
		String userInfo="admin 18 13800138000";
		String[] str=userInfo.split("\\s");
		System.out.println(str[1]);
	}
			
	//http:localhost"8080/demoWeb/index.jsp
	//http:localhost"8080/demoWeb/login.jsp?name=admin&ps=123456
	public static void test2(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入url");
		String a=sc.next();
		
		if(a.indexOf("?")==-1){
			System.out.println(a);
		}else{
		    String[] str=a.split("\\?");
			String[] b=str[1].split("&");
			//b[0]="name=admin"
			//b[1]="ps=123456"
			for(int i=0;i<b.length;i++){
				String[] c=b[i].split("=");
				String d=c[1];
				System.out.println(d);
			}
		}}
	//http:localhost"8080/demoWeb/index.jsp
		//http:localhost"8080/demoWeb/login.jsp?name=admin&ps=123456
		public static void test3(){
			Scanner sc=new Scanner(System.in);
			System.out.println("请输入url");
			String url=sc.next();
			int index=url.indexOf("?");
			if(index==-1){
				System.out.println(url);
			}else{
				//name=admin&ps=123456
				String params=url.substring(index+1);
				System.out.println(params);
				// datas[0]="name=admin"
			    // datas[1]="ps=123456"
				String[] datas=params.split("&");
				for(String str:datas){
					System.out.println(str);
					String[] param=str.split("=");
					System.out.println(param[1]);		
		}
	}
}	
	public static void main(String[] args) {
		test2();
	}
}
//编号组的应用
public class Demo2 {
	
	public static void test1(){
		String str="hhhhhhh";
		str.matches("(h)\\1+");//\\1表示捕获()组的序号,
		String str1="干干净净干";
		str.matches("(.)\\1");//\\1表示第一组(干)之后捕获一次,也就是重复一次。如果套捕获多次,用+
		//.可以代表任何字但是(..)\\1表示第一二和第三四个一样
		
		if(str.matches("hh+")){
			System.out.println("ok");
			//捕获组编号的使用:捕获组的格式必须和原字符串一样
			str="cat dog bird";//"dog bird cat"
			str.replaceAll("(cat) (dog) (bird)", "$2 $3 $1");
		}
		str="我我我我我我我我水水水水你你你我";
		str=str.replaceAll("(.)\\1+", "$1");
		System.out.println(str);
		System.out.println(str1);
	}
	public static void test2(){
		//[a-zA-Z0-9]{8,10}
		//必须包含【】里至少两种字符
		Scanner sc=new Scanner(System.in);
		String a=sc.next();
		//(.)\\2+(.)\\3*
		boolean b=a.matches("(([a-zA-Z]|[a-z0-9]|[0-9A-Z]|[a-zA-Z0-9])\\1*)*");
	//	boolean b=a.matches("(((^[a-zA-Z]$)|(^[a-z0-9]$)|(^[0-9A-Z]$)|(^[a-zA-Z0-9]$))\\1*)*");
		boolean c=a.matches("([a-z]+)|([A-Z]+)|([0-9]+)");
		if(c==true){
			System.out.println("error");	
		}else if(c==false){
			if(b==false){
			System.out.println("error");
		}else{
			System.out.println(a);
		}
		}
	}
	public static void test3(){
		Scanner sc=new Scanner(System.in);
		String a=sc.next();
		boolean c=a.matches("([a-z]+)|([A-Z]+)|([0-9]+)");
		System.out.println(c);
	}
	public static void test4(){
		Scanner sc=new Scanner(System.in);
		String a=sc.next();
		boolean b=a.matches("(([a-zA-Z]|[a-z0-9]|[0-9A-Z]|[a-zA-Z0-9])\\1*)*");
		System.out.println(b);
	}
	public static void main(String[] args) {
		test2();
	}
}

1.2.4 String不可变字符串和可变字符串

public class Demo3 {
	public static void test1(){
		String str="a";
		long start=System.currentTimeMillis();
		for(int i=1;i<=10000;i++){
			str+="b";
		}
		long end=System.currentTimeMillis();
		System.out.println(end-start);
		
		StringBuilder builder=new StringBuilder("a");
		long start1=System.currentTimeMillis();
		for(int i=1;i<=1000000;i++){
			builder.append("b");
		}
		long end1=System.currentTimeMillis();
		System.out.println(end1-start1);
	}

可变字符串:StringBuilder、StringBuffer
不开辟新空间,在同一空间内进行操作
String 声明的字符串不可以改变,StringBuilder、StringBuffer可以改变
StringBuilder不安全,但是速度快

public static void test1(){
		StringBuilder builder=new StringBuilder("hello");
		
		//字符串的追加
		String str=builder.append("abc").toString();
		System.out.println(str);
		
		//insert
		str=builder.insert(1, "a").toString();
		System.out.println(str);
		
		//delete
		str=builder.delete(2,5).toString();
		System.out.println(str);
		
		//反转
		str=builder.reverse().toString();
		System.out.println(str);
	}
	
	public static void test2(){
		StringBuilder builder=new StringBuilder("hello");
		String str=builder.append("abc")
						  .insert(1, "a")
						  .delete(2, 5)
						  .reverse()
						  .toString();
		System.out.println(str);
	}

1.2.5字符串练习

  1. 输出字符串“helloworld”的字符串长度

  2. 输出o的位置

  3. 输出从下标5开始第一次出现o的位置

  4. 截取hello并输出

  5. 截取world并输出

  6. 将字符串“ hello ”两边的空白去掉

  7. 输出第六个字符

  8. 输出字符串是否以h开头,以ld结尾

  9. 将字符串分别转换为大写小写输出

public class Test {
	public static void main(String[] args) {
		String str="helloworld";
		System.out.println(str.length());
		System.out.println(str.indexOf("o"));
		System.out.println(str.indexOf("o", 5));
		System.out.println(str.substring(0, 5));
		System.out.println(str.substring(5,10));
		System.out.println(str.trim());
		System.out.println(str.charAt(6));
		System.out.println(str.startsWith("h"));
		System.out.println(str.endsWith("ld"));
		System.out.println(str.toLowerCase());
		System.out.println(str.toUpperCase());
}}
  1. 截取子串:
    Str=”www.oracle,com”//oracle
    Str=”www.cedu.com.cn”//tedu
public class Test1 {
	public static void main(String[] args) {
		String str="www.tedu.com.cn";
		System.out.println(str.length());
		//先通过循环找出所有的".",返回"."的位置
		for(int i=0;i<=14;i++){
			if(str.charAt(i)=='.'){
				System.out.println(i);
			}
		}
		System.out.println(str.substring(4, 8));
	}
}
  1. 判断回文(回文,从中间开始两边对称)
    Str=”上海自来水来自海上”;
public class Test2 {
	public static void main(String[] args) {
		String str="上海自来水来自海上";
		System.out.println(str.length());
		out:for(int i=0;i<=4;i++){
			if(str.charAt(i)!=str.charAt(8-i))
				System.out.println("不是回文");
			break out;
		}
		System.out.println("是");
	}
}
  1. 输入一个字符串,统计字符串中字母、数字和其他符号的个数
public class Test3 {
	public static void main(String[] args) {
		int x=0;
		int y=0;
		int z=0;
		Scanner sc=new Scanner(System.in);
		System.out.println("输入字符串");
		String a=sc.next();
		System.out.println(a.length());
		int b=a.length();
		for(int i=0;i<b;i++){
			if((a.charAt(i)>='a'&&a.charAt(i)<='z')||(a.charAt(i)>='A'&&a.charAt(i)<='Z')){
				x=x+1;
			}else if(a.charAt(i)>='0'&&a.charAt(i)<='9'){
				y=y+1;
			}else{
				z=z+1;
			}
		}
		System.out.println("字母有"+x+"个,数字有"+y+"个,其他字符有"+z+"个");
	}
}

13 输入一个字符串,将其中的数字提取出来并求和
dsho353sdhiha89dnso4 -> 3+5+3+8+9+4 = 32

public class Test4 {
	public static void main(String[] args) {
		int x=0;
		int y=0;
		Scanner sc=new Scanner(System.in);
		System.out.println("输入字符串");
		String a=sc.next();
		System.out.println(a.length());
		int b=a.length();
		for(int i=0;i<b;i++){
			if(a.charAt(i)>='0'&&a.charAt(i)<='9'){
				x=a.charAt(i)-'0';
				y=x+y;
			}
		}
		System.out.println(y);
	}
}
  1. 输入一个字符串,将其中的数字提取出来并进行升序排序
    dsho353sdhiha89dnso4 -> 353894 -> 334589
public class Test5 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("输入字符串");
		String a=sc.next();
		System.out.println(a.length());
		int b=a.length();
		int[] arr=new int[b];
		
		for(int i=0;i<b;i++){
			if(a.charAt(i)>='0'&&a.charAt(i)<='9'){
				arr[i]=a.charAt(i)-'0';			
			}
		}
		Arrays.sort(arr);
		System.out.print(Arrays.toString(arr));
	}
}
  1. 输入一个字符串,统计其中每一个字符出现的次数
    sdhaofnaadsg -> s:2 d:2 h:1 a:3 o:1 f:1 n:1 g:1
//自己的,不用数组,纯字符串操作,利用反射更改字符串内容,一时兴起写的
思路:先创建一个字符串a接收用户输入的字符串,再创建一个被a赋值的字符串n,a和n地址不同,值相同,这样对n进行操作不会影响a
外for循环,遍历n字符串,如果遍历到"中",直接跳出本循环,("中后面说明"),内for循环,用第j个元素和之后的元素比较,如果相同,
将后面的那个元素变为"中"(确保用户不会输入的值),计数器+1,当内循环循环到改变之后的"中"时,跳出本次内循环,
当外循环完成一次循环,输出本次循环的第i个元素和所记的数,然后将计数器归1进行下一次循环(因为第i个元素至少出现一次)
public class Test6 {
	public static void main(String[] args)throws Exception {
		int x=1;
		Scanner sc=new Scanner(System.in);
		System.out.println("输入字符串");
		String a=new String();
		a=sc.next();
		String n=new String();
		n=a;
		System.out.println(a.length());
		int b=a.length();
		//int[] arr=new int[b];
		for(int i=0;i<b;i++){
		if(n.charAt(i)=='\u4e2d'){
				x=1;
				continue;
			}
			for(int j=i+1;j<b;j++){
				if(n.charAt(i)==n.charAt(j)){	
					Class clz=n.getClass();
					Field field=clz.getDeclaredField("value");
					field.setAccessible(true);
					char[] ch=(char[])field.get(n);
					ch[j]='\u4e2d';
					++x;
				}else{
					continue;
				}
			}
				System.out.print(a.charAt(i)+":"+x+"  ");
				x=1;	
	}
	}}
//数组方式
public static void t6(){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入:");
		String str = sc.next();
		boolean[]  b = new boolean[str.length()];
		for(int i = 0;i<b.length;i++){
			if(b[i]){   //如果当前索引处的值为true,说明已经记过数了
				continue;
			}
			char c = str.charAt(i);
			int count = 0;
			for(int j = i;j<str.length();j++){
				if(str.charAt(j)==c){
					b[j]=true;//表示b数组的索引位置的值为true
					count++;//计数
				}
			}
			System.out.println(c+":"+count);
		}
	}
	public static void main(String[] args) {
		t6();
	}
}

1.3 Object

toString、equals hashcode

public class Demo5 {
	
	public static void test1(){
		String str=new String("hello");
		Student stu=new Student(18);
		System.out.println(str);
		System.out.println(stu);
		
			Student stu2=new Student(18);
		String str2=new String("hello");
		boolean b=str.equals(str2);
		//object 类equals等价于==
		boolean b2=stu.equals(str2);
		System.out.println(b);
		System.out.println(b2);
		
		System.out.println(str.hashCode()+","+str2.hashCode());
		System.out.println(stu.hashCode()+","+stu2.hashCode());
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值