1. 字符串常用类

  String类的构造函数:

    String();

    String(byte[]);

    String(byte[],offset,length);

    String(char[],offset,length);

    String(char[],offset,length);

public class StringTest01{
    public static void main(String[] args){
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 + " " + s2);
        
        byte[] bytes = {97,98,99}; //97->a,98->b,99->100
        String s3 = new String(bytes);
        String s4 = new String(bytes,1,2);
        System.out.println(s3 + " " + s4);
        
        char[] chars = {'你','说','呢'};
        String s5 = new String(chars);
        String s6 = new String(chars,1,2);
        System.out.println(s5 + " " + s6);
        
    }
}

  a. 字符串是不可变对象(public final class String),被final修饰,不能被继承;

  b. 字符串保存在方法区中的“字符串常量池”中,因为字符串使用频繁,这样方便使用;

      String s2 = "abc";  //在栈中保存了字符串s2的内存地址,在方法区字符串常量池中保存了abc,s2指向abc;

   String s3 = new String("abc");    //在栈中保存了字符串s3的内存地址指向堆,堆中创建了对象,保存内存地址指向字符串常量池,字符串保存在方法区的字符串常量池中;

 

  字符串的常用方法:

public class StringTest02{
    public static void main(String[] args){
        //1. charAt()  返回字符串指定索引位置的字符
        char c = "abc".charAt(2);
        System.out.println(c);  //c
        
        //2. compareTo()  字符串首比较,相等返回0,前面大返回1,后面大返回-1
        System.out.println("abc".compareTo("abc"));  //0
        System.out.println("abc".compareTo("bdf"));  //-1
        System.out.println("bdf".compareTo("ace"));  //1  首字符比较出结果就可以
        
        //3. contains()  前面字符串是否包含后面字符串
        System.out.println("hello world".contains("world"));  //true
        System.out.println("hello world".contains("ord"));  //false
        
        //4. endsWith()  是否已指定字符串结尾
        System.out.println("helloworld.java".endsWith(".java"));  //true
        System.out.println("helloworld.java".endsWith(".text"));  //false
        System.out.println("helloworld.java".endsWith(".a"));  //false
        
        //5. equals() 判断字符串是否相等
        System.out.println("abc".equals("abc"));  //true
        
        //6. equalsIgnoreCase()  判断字符串是否相等忽略大小写
        System.out.println("abc".equalsIgnoreCase("AbC"));  //true
        
        //7. getBytes()  返回字符对应的ASCII码
        byte[] b1 = "abcdf".getBytes();
        for(int i=0; i<b1.length; i++){
            System.out.print(b1[i] + " ");    //97 98 99 100 102
        }
        
        //8. indexOf()  返回字符串初次出现位置的索引
        System.out.println("helloworld.javapythonjava".indexOf("java"));  //11
        
        //9. isEmpty()  判断字符串是否为空
        System.out.println("".isEmpty());  //true
        System.out.println("ABC".isEmpty());  //false
        
        //10. length()  获取字符串长度
        System.out.println("".length());  //0
        System.out.println("abc".length());  //3
        
        //11. lastIndexOf() 返回字符串最后一次出现位置的索引
        System.out.println("helloworld.javapythonjava".lastIndexOf("java"));  //21
        
        //12. replace() 字符串替换,返回新字符串
        String str1 = "helloworld".replace("world","java");  
        System.out.println(str1);
        
        //13 split() 字符串分割,返回字符串数组
        String[] str2 = "2021-11-08".split("-");
        for(int i=0; i< str2.length; i++){
            System.out.print(str2[i] + " ");
        }
        
        //14 startsWith() 判断字符串是否以指定字符串开始
        System.out.println("www.baidu.com".startsWith("www"));  //true
        System.out.println("www.baidu.com".startsWith("wwws"));  //false
        
        //15 substring() 字符串截取
        System.out.println("www.baidu.com".substring(4));  //baidu.com
        System.out.println("www.baidu.com".substring(4,9));  //baidu  左开右闭
        
        //16 toCharArray() 转换为字符数组
        char[] c1 = "牛气冲天".toCharArray();
        for(int i=0;i<c1.length;i++){
            System.out.print(c1[i] + " ");  //牛 气 冲 天
        }
        
        //17 toLowerCase()  toUpperCase()  字符串小写转换,字符串大写转换
        System.out.println("abcdABCDedf".toLowerCase());  //abcdabcdedf
        System.out.println("abcdABCDedf".toUpperCase());  //ABCDABCDEDF
        
        //18 trim()  去掉字符串前后空格
        System.out.println("  hello world ".trim());  //hello world
        
        //19 valueOf()  静态方法,类名调用,转换为字符串
        String str3 = String.valueOf(100);  //100
        System.out.print(str3);
    }
}

 

  字符串拼接:

    a. 使用“+”,使用加号拼接需要频繁创建对象,效率低;

    b. 使用StringBuffer,默认创建一个16字节容量的数组,也可以指定容量大小;

    c. 使用StringBuilder,和StringBuffer使用方法相同,区别:StringBuffer中的方法都是synchronized修饰,表示在多线程环境下可以安全使用,而StringBuilder的方法没有被synchronized修饰,表示在多线程场景下使用不安全;

public class StringTest03{
    public static void main(String[] args){
        String s1 = "abc" + "bac";
        System.out.println(s1);
        
        StringBuffer sb = new StringBuffer();  //默认创建一个容量是16的byte[]
        sb.append(100);
        sb.append(3.14);
        sb.append("adfda");
        sb.append(true);
        System.out.println(sb);
        
        StringBuffer sb1 = new StringBuffer(100);  //可以指定容量大小
        sb1.append(200);
        sb1.append(3.11);
        sb1.append("ad");
        System.out.println(sb1);
        
        StringBuilder sb2 = new StringBuilder();
        sb2.append("eeee");
        sb2.append(300);
        sb2.append(3.22);
        System.out.println(sb2);
    }
}

 

2. 包装类

  包装类的常用方法

public class IntegerTest07 {
    public static void main(String[] args) {
        int x = Integer.parseInt("123");   //parseInt  静态方法
        System.out.println(x);

        float f = Float.parseFloat("2.1");  //parseFloat
        System.out.println(f+1);

        double d = Double.parseDouble("3.14");  //parseDouble
        System.out.println(d);

        String binaryString = Integer.toBinaryString(6);  //十进制转换为二进制字符串
        System.out.println(binaryString);   //"110"

        String hexString = Integer.toHexString(16);  //十进制转换为16进制字符串
        System.out.println(hexString);   //"10"

        String octalString = Integer.toOctalString(8);  //十进制转换为八进制字符串
        System.out.println(octalString); // "10"

        Integer integer = Integer.valueOf(100);
        System.out.println(integer);  //100

        Integer integer1 = Integer.valueOf("100");
        System.out.println(integer1);

    }
}

 

  Integer int String 之间的类型转换
public class IntegerTest08 {
    public static void main(String[] args) {
        //String -->int
        int i = Integer.parseInt("123");
        //int -->String
        String s = i + "";
        System.out.println(i + "    " +  s);

        //int --> Integer
        Integer integer = 100;
        //Integer --> int
        int y = integer;
        System.out.println(integer + "    " +  y);

        //String --> Integer
        Integer integer1 = Integer.valueOf("100");
        //Integer --> String
        String s1 = String.valueOf(integer1);
        System.out.println(integer1 + "    " +  s1);
    }
}

 

3. 日期类

  String转换为Date,使用parse()

  Date转换为String,使用format()

public class DateTest01 {
    public static void main(String[] args) throws Exception{
        Date nowtime = new Date();
        //System.out.println(nowtime);    //获取系统当前时间

        //Date转换为String
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS a E");
        String nowtimestr = sdf1.format(nowtime);
        System.out.println(nowtimestr);  //输出指定格式的日期

        //String转换为Date
        String nowtimestr1 = "2021-02-15 19:17:00 300";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yy-MM-dd HH:mm:ss SSS");
        Date nowtime1 = sdf2.parse(nowtimestr1);
        System.out.println(nowtime1);
    }
}

 

  currentTimeMillis()方法可以计算方法的耗时
 示例1:
public class DateTest02 {
    public static void main(String[] args) {
        long currentTime = System.currentTimeMillis();   //获取从1970年开始到现在时间的毫秒数
        System.out.println(currentTime);
        long begin = System.currentTimeMillis();
        print();    //计算执行方法所需要的时间
        long end = System.currentTimeMillis();
        System.out.println("执行print()方法所需要的时间:"+ (end - begin) + " 毫秒");
    }


    public static void print(){
        for (int i = 0; i < 1000; i++) {
            System.out.println("i == " + i);
        }
    }
}

 

  示例2:

public class DateTest03 {
    public static void main(String[] args) {
        Date time = new Date(1);   //参数单位:毫秒 , 添加参数表示从1970年开始经历毫秒后的时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String timeStr = sdf.format(time);
        System.out.println(timeStr);   //1970-01-01 08:00:00 001  北京时差

        Date yesterday = new Date(System.currentTimeMillis() - 24*60*60*1000);
        String yesterdayStr = sdf.format(yesterday);
        System.out.println(yesterdayStr);  //2021-02-14 20:17:31 494 获取昨天现在的时间

        Date tomorrow = new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
        String tomorrowStr = sdf.format(tomorrow);
        System.out.println(tomorrowStr);   //2021-02-16 20:19:14 355 获取明天现在的时间
    }
}

 

4. 数字格式化:

   DecimalFormat 数字格式化

    #:表示任意数字

    ,: 表示千分位

    .:   表示小数点位

    0:  表示不够补0

public class DecimalFormatTest01 {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("###,###.##");
        String str1 = df.format(1234.5678);
        System.out.println(str1);  //1,234.57

        DecimalFormat df1 = new DecimalFormat("###,###.0000");
        String str2 = df1.format(1234.56);
        System.out.println(str2);  //1,234.5600
    }
}

 

  BigDecimal:高精度计算,主要用于财务类的计算中

public class DecimalFormatTest02 {
    public static void main(String[] args) {
        BigDecimal bg1 = new BigDecimal(100);
        BigDecimal bg2 = new BigDecimal(200);
        BigDecimal bg3 = bg1.add(bg2);
        BigDecimal bg4 = bg2.divide(bg1);
        System.out.println(bg3);
        System.out.println(bg4);
    }
}

 

5. 枚举类型

  当返回值有两种类型时,可以使用boolean类型

  当返回值有三种或三种以上类型时,可以使用枚举类型,枚举也是一种引用数据类型,枚举中的值可以看作常量

public class EnumTest01{
    public static void main(String[] args){
        Result r = divide(10,0);
        System.out.println(r == Result.SUCCESS? "计算成功":"计算失败");
    }
    
    public static Result divide(int a, int b){
        try{
            int c = a / b;
            return Result.SUCCESS;
        }catch(Exception e){
            e.printStackTrace();
            return Result.FAILED;
        }
    }
}

enum Result{
    SUCCESS,FAILED
}

 

6. 生成随机数

  Random

public class RandomTest01 {
    public static void main(String[] args) {
        Random random = new Random();
        int i = random.nextInt();   //产生一个int范围内的随机数
        System.out.println(i);

        int j = random.nextInt(101);   //产生[0-101)范围内的随机数,不包括101
        System.out.println(j);
    }
}

 

  生成5个不重复的随机数放到数组中

public class RandomTest02 {
    public static void main(String[] args) {
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {     //先把数组中的元素都置为-1,因为可能生成随机数0
            arr[i] = -1;
        }
        Random random = new Random();
        int index = 0;
        while (index < arr.length){
            int num = random.nextInt(5);
            if(!contains(arr,num)){
                arr[index++] = num;    //只有不包含的情况才把num放到数组中,同时index+1;
            }
        }
        for (int i = 0; i < arr.length; i++) {    //数组的遍历
            System.out.println(arr[i]);
        }
    }

    /**
     * 判读数组中是否包含随机生成的数
     * @param arr
     * @param key
     * @return
     */
    public static boolean contains(int[] arr, int key){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == key){
                return true;
            }
        }
        return false;
    }
}

 

posted on 2021-11-08 12:09  homle  阅读(63)  评论(0编辑  收藏  举报