java学习day014

常用API

1.String

   1.1 是什么

        String 字符串类,底层就是一个字符数组. 所以很多特性就是数组的特性.

        1.字符串一旦创建,不能更改. ​
        2为了提高字符串的访问效率java提供了一种缓存技术,字符串常量池. ​
        3如果是用 = "" 就不会再堆内存创建对象,而是直接在常量池中进行搜索,如果有就直接使用,没有就创建. ​
        4如果new String("")会在堆内存创建字符串对象,并且常量池中如果没有,也会创建.

    1.2 怎么使用

String s1 = "ab";
String s2 = "ab";
System.out.println(s1 == s2);//true
// 以上程序只会在常量池中创建一个ab对象,并且s1和s2都指向ab
	
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4);//false
System.out.println(s3.equals(s4));//true
// 堆内存两个,常量池一个,s3和s4分别指向不同的堆内存
		
String s5 = new String("zxc");
// intern : 在字符串常量池中查询,是否存在当前字符串,如果不存在就把字符串放进去
s5.intern();
String s6 = "zxc";
// false , 因为new 存放在堆内存,s6指向的zxc 是常量池
// s5.intern(); 把s5放进常量池的时候,发现已经有了,所以并不会把s5放进去
System.out.println(s5 == s6);//false
		
String s7 = new String("a") + new String("a") ;
// a会被放在常量池中一份,堆内存中也有,但是拼接的aa 会在堆内存存储,但是不会在常量池中
// 因此 s7.intern() 的时候,会把s7放到常量池中一份
s7.intern();
// s8="aa" 发现常量池中已经有s7了("aa") 则 直接指向,不再创建
String s8 = "aa";
// 因此s7和s8的地址相同
System.out.println(s7 == s8);//true
System.out.println(s7.equals(s8));//true	

    1.3 构造方法

//1.字面量
String s1 = "abc";
//2.变量
String s2 = new String("abc");
//3.字节数组
byte[] b = {97,98,99,100,101,102};
String s3 = new String(b);
//4.指定个数,从下标1开始(包含下标1),取三个
s3 = new String(b,1,3);
//5.字符数组,用法同字节数组

1.4 常用方法

        1.char charAt(int index):获取字符串中指定下标的字符

String s1 = "acafeed";
char c1 = s1.charAt(3);
System.out.println(c1);//f

        2.boolean endsWith(String suffix):判断某个字符串是否已指定字符串结尾
           boolean startsWith(String prefix):判断某个字符串是否已指定字符串开头

System.out.println("ascscsaw".startsWith("as"));//true
System.out.println("ascscsaw".endsWith("aw"));//true

        3.boolean equals(Object obj) : 判断是否相等 boolean equalsIgnoreCase(String str) : 不区分大小写比较是否相等

System.out.println("abcdEfg".equalsIgnoreCase("AbcDEfG"));// ture

        4. int indexOf(String str) : 获取指定字符串的起始索引,不存在返回-1(第一次出现的位置)

System.out.println("ascecsef".indexOf("c"));// 2

        5. int indexOf(String str,int fromIndex) : 获取指定字符串的起始索引,不存在返回-1(从指定位置(包含)开始向后找)

System.out.println("ascecsef".indexOf("c",3));// 4

        6. int lastIndexOf(String str) : 获取指定字符串的结束索引,不存在返回-1(最后一次出现的位置)

System.out.println("ascecsef".lastIndexOf("e"));// 6

       7. int lastIndexOf(String str,int formIndex) : 获取指定字符串的结束索引,不存在返回-1(从指定位置(包含)开始向前前找)

System.out.println("ascecsef".lastIndexOf("e",5));// 3

       8. int length() 字符串长度

System.out.println("abcdefg".length());// 7

       9. String replace(String str,String replace) : 替换指定字符,返回新字符串

System.out.println("abcdabcd".replace("a", "."));//.bcd.bcd

       10. String replaceAll(String str,String replace) 替换,支持正则表达式 在正则表达式中 . 代表任意字符

System.out.println("abc.abc.".replaceAll(".", "="));//========

       11. String[] split(String regex) : 以特定字符分割,得到字符串数组,支持正则表达式

String[] arr1 = "2024-8-5".split("-");;
for (int i = 0; i < arr1.length; i++) {
    System.out.print(arr1[i]+" ");//2024 8 5
}

       12. String substring(int begin) : 获取指定下标为起始的,子字符串(包含)

System.out.println("abcdefg".substring(2));//cdefg

       13. String substring(int beginIndex , int endIndex) :获取指定位置起始(包含) 到指定位置结束(不包含)的子字符串

System.out.println("abcdefg".substring(2,5));//cde

        14. char[] toCharArray() : 把字符串转换为char数组

char[] arr2 = "abcdefg".toCharArray();
for (int i = 0; i < arr2.length; i++) {
    System.out.print(arr2[i]+" ");// a b c d e f g
}

       15. String toUpperCase() 转大写

System.out.println("abCdefg".toUpperCase());// ABCDEFG

       16. String toLowerCase() 转小写

System.out.println("AbcdEfg".toLowerCase());// abcdefg

       17. String trim() : 删除两边空格

System.out.println("   abf      afwd     aef       ".trim());//abf      afwd     aef

1.5 注意事项

1.不要做频繁的字符串拼接操作
2.

 

二.String Buffer 和 String Builder

2.1 是什么

是可以拼接的字符串.需要大量拼接时使用String Buffer 和 String Builder
他们两个底层也是char数组,只不过该数组会进行自动扩容
默认长度为16, 扩大长度为2倍+2

区别 :
        String Buffer是非线程安全( 不保证安全,不一定一定会出现问题),多线程环境下可能出现问题         String Builder是线程安全,多线程环境下不会出现问题

2.2 使用

StringBuilder sb = new StringBuilder();
//拼接操作
sb.append("a");
//可以链式调用
sb.append("b").append("c");
//添加到指定位置
sb.inser(1,"e");
//反转字符串
sb.reverse();
//长度,添加的元素个数
System.out.println(sb.length());// 4
//数组长度,容量,默认16
System.out.println(sb.capacity());// 16
//转换为String类型
String str = sb.toString();
System.out.println(str);// ecba

三.System

方法 :

       1. 获取当前时间对应的毫秒数(对应格林威治时间1970年8月1日 08:00:00 000)

long startTime = System.currentTimeMillis();
System.out.println(startTime);// 1722840430330

       2. 控制台标准输入

System.in

       3. 控制台标准输出

System.out

       4. 建议垃圾回收

System.gc();

       5. 退出JVM,0表示正常退出,一般用于图像界面关闭窗口

System.exit(0);

四.Date

4.1 构造方法

//java.util下
//无参构造
Date d = new Date();
System.out.pringln(d);//Mon Aug 05 14:55:01 CST 2024
​
//传入long类型毫秒数
//时间原点到指定毫秒数的时间
Date d1 = new Date(1000);
System.out.println(d1);//Thu Jan 01 08:00:01 CST 1970

4.2 时间格式化

Date d = new Date();
//y年
//M月
//d日
//H小时
//m分
//s秒
//S毫秒
//时间格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss sSs");
//格式化,把Date按照特定格式转换为String类型
String string = sdf.format(d);
System.outprintln(string);
​
String string1 = "2024年08月05日12:00:19 1957619";
//String string2 = "2024年08-05日12:00:19 1957619";
//与sdf格式不一样会出现以下错误
//Exception in thread "main" java.text.ParseException: Unparseable date: "2024年08-05日12:00:19 1957619"
​
// 时间格式的字符串,转换为Date对象,注意需要和sdf的格式对应
Date d1 = sdf.parse(string1);
System.out.println(d1);//Mon Aug 05 12:32:56 CST 2024

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值