0
点赞
收藏
分享

微信扫一扫

学习大数据的第17天(继续java的内容)——Java常用类之(String、StringBuffer、StringBuilder、Arrays、Date、Math)

以沫的窝 2022-01-21 阅读 29

学习大数据的第17天(继续java的内容)——Java常用类之(String、StringBuffer、StringBuilder、Arrays、Date、Math)

复习String

String 的一些例题

/*
    把数组中的数据按照指定个格式拼接成一个字符串
    举例:int[] arr = {1,2,3};	输出结果:[1, 2, 3]
 */

import java.util.Scanner;

public class StringTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = "";
        char[] chars = {'h', 'e', 'l', 'l', 'o'};
        for (int i = 0; i < chars.length; i++) {
            if (i == 0) {
                s = s + "[" + chars[i] + ",";
            } else if (i == chars.length - 1) {
                s = s + chars[i] + "]";
            } else {
                s = s + chars[i] +",";
            }

        }
        System.out.println(s);
    }
}
/*
    字符串反转
        举例:键盘录入”abc”		输出结果:”cba”
 */

import java.util.Scanner;

public class StringTest2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();
        String str1 = "";
        char[] chars = str.toCharArray();
        for (int i = chars.length - 1; i >= 0; i--) {
            str1 = str1 + chars[i];
        }
        System.out.println("反转过后的字符串:" + str1);

    }
}
/*
    统计大串中小串出现的次数
        举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次

 */
public class StringTest3 {
    public static void main(String[] args) {

        String bigstring = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";

        String minstring = "java";

        int count = 0;

        int index = bigstring.indexOf(minstring);

        if (index == -1) {
            System.out.println("大串字符串中没有想要的字符串");
        } else {
            while (index != -1) {
                count++;
                int startIndex = index + minstring.length();
                bigstring = bigstring.substring(startIndex);
                index = bigstring.indexOf(minstring);
                System.out.println("截取的子字符串:" + bigstring);
            }
        }
        System.out.println("小字符串出现了:" + count);
    }
}

在学习例题的过程中发现关于字符串的各种用法和提高解决字符串数据的能力,记住String一些实用的方法,忘了的话,往前翻翻奥

StringBuffer

1、线程安全的
不安全,就是存在同步操作同一数据的行为,效率高。
安全的时候,没有同步操作,效率低。
在实际开发中,效率和安全着两个问题一直都是很难平衡的问题。
生活中的例子:
线程安全的例子:银行的一些业务,电影院卖票,医院取号。
线程不安全的例子:视频会员,博客评论
2、线程安全的,StringBuffer是一个可变序列
3、StringBuffer又称之为字符串缓冲区,就把它当作一个字符串去操作,只不过它与String相比是可以修改内容的
4、在任何时间点,它包含着一些特定的字符序列,但是可以通过某些方法修改这字符序列的长度和内容
简单记忆:StringBuffer是一个线程安全的可变序列。
面试题:StringBuffer与String区别:
1、StringBuffer的长度和内容都可以发生改变,String却不行
2、String每创建一个新的字符串都会开辟一个新的常量池区域
StringBuffer会提前给出容量,可以进行字符串的拼接,而不会重新弄开辟空间
StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。
public StringBuffer(int capacity) 构造初始容量自定的容器StringBuffer

构造方法的使用

//定义一个空的字符串且容量为16
        StringBuffer sb1 = new StringBuffer("helloasdasdasdasdasdasdsadasdasd");
        //当StringBuffer中有字符串的时候,容量为字符长度  +  默认的容量16
        System.out.println(sb1.capacity());
        //容器中字符串的长度
        System.out.println(sb1.length());

StringBuffer的功能方法测试

添加功能
public StringBuffer append(String str)
public StringBuffer insert(int offset,String str)
删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
替换功能
public StringBuffer replace(int start,int end,String str)
反转功能 public StringBuffer reverse()
截取功能
public String substring(int start)
public String substring(int start,int end)
截取功能和前面几个功能的不同
返回值类型是String类型,本身没有发生改变

public class StringBufferDemo2 {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("hello");
        //public StringBuffer append(String str)  在字符串后面添加字符
        sb1.append("world");
        System.out.println(sb1);
        System.out.println("=========================================");
        //public StringBuffer insert(int offset,String str)     在字符串的起始位置offset  插入str字符串
        sb1.insert(0, "world");
        System.out.println(sb1);
        System.out.println("=========================================");
        //public StringBuffer deleteCharAt(int index)    删除指定位置的字符
        sb1.deleteCharAt(1);
        System.out.println(sb1);
        System.out.println("=========================================");
        //public StringBuffer delete(int start,int end)    删除指定的字符串
        sb1.delete(0, 4);
        System.out.println(sb1);
        System.out.println("=========================================");
        // public StringBuffer replace(int start,int end,String str)   将目标字符串替换指定位置的字符串
        String s1 = "java";
        sb1.replace(0, 5, s1);
        System.out.println(sb1);
        System.out.println("=========================================");
        //public StringBuffer reverse()     实现字符串反转  返回值为StringBuffer
        StringBuffer sb2 = sb1.reverse();
        System.out.println(sb2);
        System.out.println("=========================================");
        //public String substring(int start)   截取从start位置开始到最后的字符串
        String s2 = sb2.substring(0);
        System.out.println(s2);
        System.out.println("=========================================");
        //public String substring(int start,int end)    截取从start 到 end位置的字符串(包括开头位置,不包括结束位置)
        String s3 = sb2.substring(2,5);
        System.out.println(s3);
        //截取功能和前面几个功能的不同
        //返回值类型是String类型,本身没有发生改变
    }
}

String和StringBuffer的转换

/*
    String和StringBuffer的相互转换
    把数组拼接成一个字符串
    把字符串反转
    判断一个字符串是否是对称字符串
    例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

 */
public class StringBufferDemo3 {
    public static void main(String[] args) {

        //String和StringBuffer的相互转换
        System.out.println("===================================");
        //String ——> StringBuffer
        //1、方法一  通过构造方法来转换
        String s1 = "hello";
        StringBuffer sb1 = new StringBuffer(s1);
        System.out.println(sb1);
        //2、方法二  通过append的方法转换
        String s2 = "world";
        StringBuffer sb2 = new StringBuffer();
        sb2.append(s2);
        System.out.println(sb2);

        System.out.println("===================================");
        //StringBuffer  ——>  String
        //方法一  toString()
        StringBuffer sb3 = new StringBuffer("hello");
        String s3 = sb3.toString();
        System.out.println(s3);
        //方法二  subString切割字符串,这里可以用subString(int start)
        StringBuffer sb4 = new StringBuffer("world");
        String s4 = sb4.substring(0);
        System.out.println(s4);

        //方法三  String(StringBuffer sb)     使用String的构造方法
        String s5 = new String(sb4);
        System.out.println(s5);
    }
}

面试题

/*
     面试题1:String,StringBuffer,StringBuilder之间的区别
            1、StringBuffer是线程同步安全的,数据安全,效率低。
              StringBuilder不是线程同步安全的,数据不安全,效率高。
            2、String的内容是不可改变的,StringBuffer和StringBuilder是可变序列。
            3、StringBuffer中方法上有synchronized关键字。
     面试题2:StringBuffer和数组的区别?
        它们都可以被看作是一个容器,装一些数据。
        但是,StringBuffer里面的数据都是一个一个字符
        数组可以存放不同数据类型的数据,但是同一个数组只能存放同一种数据类型的数据。


     通过查看API了解一下StringBuilder类
        String,StringBuffer,StringBuilder的区别
        StringBuffer和数组的区别
        看程序写结果:
        String作为参数传递
        StringBuffer作为参数传递

 */
public class StringBufferDemo4 {
    public static void main(String[] args) {

        //创建一个StringBuffer和StringBuild对象
        StringBuffer stringBuffer = new StringBuffer();

        StringBuilder stringBuilder = new StringBuilder();

        String s1 = "hello";
        String s2 = "world";
        change(s1, s2);
        System.out.println("查看原先的值是否改变   s1: " + s1 + "    s2: " + s2);

        //这个案例说明在StringBuffer和StringBuilder中改变值,容器内部会发生。
        System.out.println("========================================");
        stringBuffer.append("hello");
        stringBuilder.append("world");
        System.out.println("StringBuffer:" + stringBuffer + "  StringBuilder:" + stringBuilder);
        change(stringBuffer, stringBuilder);
        System.out.println("StringBuffer:" + stringBuffer + "  StringBuilder:" + stringBuilder);
    }

    //查看在方法中改变字符串的值
    public static void change(String s1, String s2) {
        s1 = s2;
        s2 = s1 + s2;
        System.out.println("s1: " + s1 + "    s2: " + s2);
    }

    //查看用StringBuffer作为参数
    public static void change(StringBuffer stringBuffer, StringBuilder stringBuilder) {
        stringBuffer.append("java");
        stringBuilder.append("wonderfully");
        System.out.println("StringBuffer:" + stringBuffer + "  StringBuilder:" + stringBuilder);
    }
}

StringBuilder和StringBuffer的方法差不多但是了解String、StringBuffer、StringBuilder三者的区别

Arrays 数组类

/*
        Arrays针对于数组做操作的类,该类包含用于操作数组的各种方法(如排序和搜索)。
                public static String toString(int[] a)
                public static void sort(int[] a)
                public static int binarySearch(int[] a,int key)

 */
public class ArraysDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {21, 32, 44, 1, 4, 89, 16};

        //public static String toString(int[] a)
        //将数组转换成一个字符串
//        System.out.println(arr);
        String s = Arrays.toString(arr);
        System.out.println(s);

        System.out.println("=================================");
        //public static void sort(int[] a)
        Arrays.sort(arr);
        System.out.println("排序后的数组为:" + Arrays.toString(arr));

        System.out.println("=================================");
        //public static int binarySearch(int[] a,int key)
        //[1, 4, 16, 21, 32, 44, 89]
        //二分查找的前提是数组本身是排过序的
        System.out.println("二分查找32:" + Arrays.binarySearch(arr, 32));
        System.out.println("二分查找32:" + Arrays.binarySearch(arr, 100)); // -8



    }
}

Date 日期类

/*
        Date:日期类

        构造方法:
            Date() 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。

       日期格式化:SimpleDateFormat
 */
public class DateDemo {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date); //Fri Jan 21 16:47:23 CST 2022 系统时间
        //由于我们经常看到时间不是这样的,应该是年,月,日,时分秒
        //日期的格式化
        //SimpleDateFormat(String pattern)
        //使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。

        /**
         *      yyyy:年
         *      MM:月
         *      dd:日
         *      HH:24小时制度
         *      hh:12小时制度
         *      mm:表示分钟
         *      ss:表示秒
         */
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd EEE a hh:mm:ss ");
        String s = simpleDateFormat.format(date);
        System.out.println(s);

    }
}

Math类

/*
        Math:Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
        public static int abs(int a)
        public static double ceil(double a)
        public static double floor(double a)
        public static int max(int a,int b) min自学
        public static double pow(double a,double b)
        public static double random()
        public static int round(float a) 参数为double的自学
        public static double sqrt(double a)

 */
public class MathDemo {
    public static void main(String[] args) {
        //public static int abs(int a) 绝对值
        int num1 = Math.abs(-10);
        System.out.println(num1);
        //public static double ceil(double a)
        double num2 = Math.ceil(12.04);
        System.out.println(num2); 
        //floor
        double num3 = Math.floor(12.84);
        System.out.println(num3);
        //public static double sqrt(double a)
        //public static double sqrt(double a)返回double值正确舍入的正平方根。
        double num4 = Math.sqrt(3);
        System.out.println(num4);


    }
}
举报

相关推荐

0 条评论