13、java基础——常用类 、String、日期

String

String用来定义字符串

1. 定义的方式

/*
 * 1. 字符串的创建形式
 */
String str = "abc";
​
String str2 = new String("abc");
​
byte[] arr = {97,98,99};
String str3 = new String(arr);
​
char[] arr2 = {'a','b','c'};
String str4 = new String(arr2);
​
System.out.println(str4);

2. 字符串的比较

  • == 一般不使用== 比较字符串对象

  • equals() String类重写equals方法

    • 比较逻辑,比较两个字符串中的字符是否相等

    public boolean equals(Object anObject) {
        //首先判断是不是和自己比较,如果是,直接返回true
        if (this == anObject) {
            return true;
        }
        //判断参数的数据类型是不是字符串,如果不是,直接返回false
        if (anObject instanceof String) {
            //如果是字符串,就进行强制类型转化
            String anotherString = (String)anObject;
            //value表示存储当前字符串的字符数组
            //获取字符串的长度,表示有多少个字符
            int n = value.length;
            //判断两个字符串的长度是否相等,如果不相等,就直接返回false
            if (n == anotherString.value.length) {
                char v1[] = value; // 获取调用该方法字符串的字符数组
                char v2[] = anotherString.value; //比较的字符串的字符数组
                int i = 0;
                while (n-- != 0) {
                    // 逐个比较字符串,只要有不等的,直接返回false
                    if (v1[i] != v2[i]){   
                        return false;
                    }
                    i++;
                }
                return true;  //如果每个字符都相等,返回true
            }
        }
        return false;
    }

//s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]    
public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;
​
            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

package com.qfedu;
​
public class Demo02 {
​
    public static void main(String[] args) {
        String str = "abc";
        String str2 = "abc";
        
        String str3 = new String("abc");
        String str4 = new String("abc");
        
        
        boolean b1 = str.equals(str2);   // true
        boolean b2 = str.equals(str3);   // true
        boolean b3 = str3.equals(str4);  // true
        
        System.out.println(b3);
        
        
        boolean b4 = str == str2;  //true
        boolean b5 = str == str3;  //false
        boolean b6 = str3 == str4; //false
        
        System.out.println("b4="+b4);
        System.out.println("b5="+b5);
        System.out.println("b6="+b6);
        
        
    
    }
}

2.1 在内存中存储位置

 

2.2 String定义的字符串不可改变

String定义的字符串是不能被修改,修改的只是变量引用的地址。

3. 常用方法

 

package com.qfedu;
​
import java.util.Arrays;
​
public class Demo04 {
​
    public static void main(String[] args) {
        /*
         * String的常用方法
         * 
         * 1. charAt(0)
         * 2. length()
         * 
         */
        String str = "abcdefghia";
        
        char c = str.charAt(0);
        System.out.println(c);
        
        //遍历出每一个字符
        int length = str.length();
        for(int i=0; i<length; i++) {
            System.out.println(str.charAt(i));
        }
        
        //包含
        boolean b1 = str.contains("aa");
        System.out.println(b1);
        
        //获取首次出现第一个字符的下标   如果不包含返回-1
        int index = str.indexOf("a");
        System.out.println(index);
        
        //获取最后一次出现第一个字符的下标   如果不包含返回-1
        int index2 = str.lastIndexOf("ba");
        System.out.println(index2);
        
        
        char[] charArray = str.toCharArray();
        
        String str2 = " a b c ";
        String trim = str2.trim();
        System.out.println(trim);
        
        String upperCase = trim.toUpperCase();   //大写
        System.out.println(upperCase);
        
        String lowerCase = upperCase.toLowerCase();  //小写
        System.out.println(lowerCase);
        
        
        String str3 = "abcd";
        boolean endsWith = str3.endsWith("dd");  //结尾
        System.out.println(endsWith);
        
        boolean startsWith = str3.startsWith("a"); // 开头
        
        String str4 = "aa,bb,cc,dd";
        
        String[] split = str4.split(",");   //{"aa","bb","cc","dd"}
        System.out.println(Arrays.toString(split));
        
        String bookName = "天龙八部.txt";
        String[] split2 = bookName.split("\\.");
        System.out.println(split2[split2.length-1]);
        
        
        String str5 = "123456";
        
        String substring = str5.substring(1); // 截取字符串,只有一个参数
        System.out.println(substring);
        
        
        String substring2 = str5.substring(1,4); // 包含前不包含后
        System.out.println(substring2);
        
        bookName = "天龙.八部.txt";
        String substring3 = bookName.substring(bookName.lastIndexOf(".")+1);
        System.out.println(substring3);
        
    }
}

可变字符串

如果需要对字符串进行频繁且多次的操作,我们可以使用可变字符串

  • StringBuffer 线程安全的, 执行的效率

  • StringBuilder 线程不安全的,执行效率高

他们的方法名都是一样。

package com.qfedu;
​
public class Demo05 {
​
    public static void main(String[] args) {
        
        /*
         * 我们定义可变字符串的目的,就是为了频繁的操作字符串
         */
        StringBuilder sf = new StringBuilder();
        
        //拼接字符串
        sf.append("我是一个兵,");
        sf.append("来自老百姓");
        
        //替换下面的写法
        String s1 = "我是一个兵,";
        s1 += "来自老百姓";
        
        /*
         * StringBuilder 转化为字符串
         * 使用 toString() 转化
         */
        
        String str = sf.toString();
        System.out.println(str);
    }
}

日期

Date

  • 表示日期

package com.qfedu;
​
import java.util.Date;
​
public class Demo01 {
​
    public static void main(String[] args) {
        
        //1. 获取当前时间,表示时间
        Date now = new Date();
        System.out.println(now);
        
        /*
         * 2.作为日期的数据类型
         *      员工类 生日
         */
        
        long time = now.getTime(); // 获取1970-01-01 00:00:00 到现在的毫秒数
        System.out.println(time);
        
    }
}
​
class Emp {
    
    private String name;
    private Date birthday;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
}

Calendar

  • 操作日期

    • set(field, amount)

    • add(field, amount);

package com.qfedu;
​
import java.util.Calendar;
​
public class Demo02 {
​
    public static void main(String[] args) {
        
        /*
         * 操作日期,使用Calendar来操作
         */
        Calendar c = Calendar.getInstance(); 
        
        //get(field, num)
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH); // 0 1 2 3 4 5 6 7 8 9 10 11
        int week = c.get(Calendar.WEEK_OF_YEAR);
        System.out.println(week);
        
        //set(field, amount)
        c.set(Calendar.DATE, 15);
        System.out.println(c.getTime()); // Calendar 转化为  Date
        
        
        //add(field, amount);
        c.add(Calendar.YEAR, -10);
        System.out.println(c.getTime()); // Calendar 转化为  Date
        
        /*
         * 获取
         *  两年,三个月,10天,5个小时  20分后的时间
         */
        c = Calendar.getInstance();
        
        c.add(Calendar.YEAR, 2);
        c.add(Calendar.MONTH, 3);
        c.add(Calendar.DATE, 10);
        c.add(Calendar.HOUR, 5);
        c.add(Calendar.MINUTE, 20);
        System.out.println(c.getTime()); // Calendar 转化为  Date
        
        
        c = Calendar.getInstance();
        //获取本月的最后一天
        c.add(Calendar.MONTH, 1);
        c.set(Calendar.DATE, 1);
        c.add(Calendar.DATE, -1);
        System.out.println(c.getTime()); // Calendar 转化为  Date
        
        
        /*
         * 获取
         *  两年前  那个星期的星期一
         */
        c = Calendar.getInstance();
        c.add(Calendar.YEAR, -2);
        c.set(Calendar.DAY_OF_WEEK, 2);
        
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值