• String类; Math类;System类;StringBuilder类;String和StringBuilder作为方法参数 (Java Day12)


    一,String的常用功能

    • String类型的获取功能

    1. int length():获取字符串的长度
    2. char charAt(int index):获取字符串参数角标位置上面的字符
    3. String substring(int beginIndex):获取从字符串参数角标开始一直到结尾部分的字符串 【新的字符串】
    4. String substring(int beginIndex, int endIndex):​ 获取从字符串参数指定范围的字符串 【新的字符串】
    5. indexOf家族:

      5.1, int indexOf(int ch):获取字符串中第一出现参数字节的索引值从左往右查 开头开始
      5.2, int indexOf(int ch, int fromIndex):获取字符串从参数索引开始中第一出现参数字节的索引值【从左往右查 参数索引开始
      5.3,  int indexOf(String str):获取字符串中第一出现参数字符串的索引值  [从左往右查 开头开始
      5.4,     int indexOf(String str, int fromIndex):获取字符串从参数索引开始中第一出现参数字符串的索引值【从左往右查 参数索引开始

    ​       6.  lastIndexOf家族:和IndexOf基本一样,只不过是从后往前找,所有字符和字符串的索引也都不会发生变化

    ​                                     【从右往左查 尾部开始】

    ​                                     【从右往左查 参数开始】

    代码示例

    public class Demo {
        public static void main(String[] args) {
            String s = "abcdef";
            int length = s.length();
            System.out.println(length); //长度为:6
            char c = s.charAt(4);
            System.out.println(c); //第四个角标值为: e
            String name = "我爱你武汉";
            System.out.println(name.charAt(3));//第三个角标值:
            String ss = name.substring(1);
            System.out.println(ss);//从第一个角标值开始:爱你武汉
            String string = name.substring(1, 3);
            System.out.println(string);//爱你  截取的时候含头不含尾
    //indexOf家族 
            String  sss = "abcabdcdes";
            int i = sss.indexOf(97);//0 97为a,a的角标值为0
            int l = sss.lastIndexOf(97);  //从右往左数第一个a 是在第三个角标值位置
            System.out.println(i);//0
            System.out.println(l);//3
            System.out.println("=================");
    int i1 = sss.indexOf(97,2);//0 从第二个角标开始是c,c的角标值是3 System.out.println(i1);//3 int j = name.indexOf(''); System.out.println(j); //1 int k = sss.indexOf("bc"); System.out.println(k);//1 第一个字母b的角标值是1 int k1 = sss.indexOf("bc",3); System.out.println(k1);//没有这字符串 索引应该返回什么 -1 } }
    • String类型的转换功能

    1. ​byte[] getBytes():把字符串转换为字节数组
    2. char[] toCharArray():把字符串转换为字符数组
    3. toUpperCase():把字符串内容转为全部大写
    4. toLowerCase():把字符串内容转为全部小写
    5. concat(String str):合并两个字符串为一个字符串
    6. valueOf家族:把基本数据类型的数据转换为字符串
    • ​ 他是一个静态方法不需要对象调用
    
    import java.util.Arrays;
    public class Demo02 {
        public static void main(String[] args) {
            //转换功能
            String s = "dhfasj";
            byte[] bs = s.getBytes();
            System.out.println(Arrays.toString(bs));//Arrays.toString(bs)工具类的方法用来查看数组内容
            char[] cs = s.toCharArray();
            System.out.println(Arrays.toString(cs));
            String case1 = s.toUpperCase();
            System.out.println(case1);//得到的是新的字符串,原来的字符串没有发生任何的变化
            System.out.println(s);
            String case2 = case1.toLowerCase();
            System.out.println(case2);
            String concat = case1.concat(case2);
            System.out.println(concat);//DHFASJdhfasj
            String concat1 = case2.concat(case1);
            System.out.println(concat1);//dhfasjDHFASJ
            System.out.println(case1+case2);//DHFASJdhfasj
            //valueOf
            String valueOf = String.valueOf(20);
            System.out.println(valueOf);//20
            System.out.println(valueOf+50);// 2050
        }
    }

    练习

    • 键盘录入一个大小写混杂的纯英文字符串
    • 将字符串转换成首字母大写,其他字母全部小写
    • 例如,键盘录入”i lOvE jAvA”,转换成 “I love java”
    • 分析:
    1. 键盘录入字符串【字符串带有空格 使用nextLine】
    2. 把录入的字符串的首字母得到 【截取功能】
    3. 把他变成大写
    4. 还得到其他的所有的字符串 把变成小写
    5. 把转换后的字符串要拼接起来
    
    import java.util.Scanner;
    class String_Test {
        public static void main(String[] args) {
    //        1、键盘录入字符串【字符串带有空格  使用 nextLine 
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串:");
            String line = sc.nextLine();
    //        2、把录入的字符串的首字母得到 【截取功能】
            String start = line.substring(0,1);
    //        3、把他变成大写
            String upperCase = start.toUpperCase();
    //        4、还得到其他的所有的字符串 把变成小写
            String end = line.substring(1);
            String lowerCase = end.toLowerCase();
    //        5、把转换后的字符串要拼接起来
            String concat = upperCase.concat(lowerCase);
            System.out.println(concat);
        }
    }
    • String类型的其他方法

    1. String replace(String oldStr, String newStr):使用新的字符串替换就得字符串
    2. trim():去掉字符串左右两边的空格、制表符
    3. split(String s):使用参数s对字符串切割,切割成字符串数组
    
    import java.util.Arrays;
    public class Demo03 {
        public static void main(String[] args) {
            String s = "ababababababab";
            String ss = "  aba bab abab abab    ";
            String sss = "a,a,a,as,fds,gd,gsgd,s";
    String replace
    = s.replace("a", "*"); System.out.println(replace); String trim = ss.trim(); System.out.println(trim); System.out.println(ss);
    String[] split
    = sss.split(","); System.out.println(Arrays.toString(split)); String[] split2 = trim.split(" "); System.out.println(Arrays.toString(split2));
    String sd
    = "as.df.gs"; String[] split3 = sd.split(".");//单独写.编译器不识别 需要转义 //. System.out.println(Arrays.toString(split3));//[] String[] split4 = sd.split("\.");//单独写.编译器不识别 需要转义 \. 编译器就认识为. System.out.println(Arrays.toString(split4));//[
    as, df, gs]
        }
    }

    二,Math

    • 概述:他是一个专门从事数学运算的一个运算类【工具类】
    • 成员变量:
    1. ​ E:更接近自然对数的底数e的一个常量, E= 2.718
    2. ​ PI:更接近于圆周率 的一个常量, PI = 3.1415926
    • 方法:
    1. abs(整数类型的数据):求取传入数据的绝对值
    2. ​ cbrt(double a):求取数的立方根
    3. ​ sqrt(double a):求取数的正平方根
    4. ceil(double a)向上取最接近参数的整数
    5. floor(double a)向下取最接近参数的整数
    6. ​ max(两个浮点或整形的数):求取两个参数的最大值
    7. min(两个浮点或整形的数):求取两个参数的最小值
    8. ​ pow(double a,double b):返回a的b次幂【次方】
    9. random():随机生成0到1.0之间的小数【不包含1.0】
    10. ​ round(double a)四舍五入【只针对第一位小数】
    11. log10(double a):返回以10 为底的a的对数【求幂的逆运算】 比如 1og10 (​ 100)=2
    12. ​ log(double a):返回以e为底的a的对数

    代码示例

    public class Demo_Math {
        public static void main(String[] args) {
            //属性
            System.out.println(Math.E);//2.718
            System.out.println(Math.PI);//3.14159265358
            //方法
            System.out.println(Math.abs(103));//103
            System.out.println(Math.abs(-103));//103
            System.out.println(Math.cbrt(27.0));//3.0
            System.out.println(Math.sqrt(103));//10.14889156509222
            System.out.println(Math.sqrt(4));//2.0
            System.out.println(Math.ceil(2.3));//3.0
            System.out.println(Math.ceil(-2.3));//-2.0
            System.out.println(Math.floor(4.0));//4.0
            System.out.println(Math.floor(-4.00009));//-5.0
            System.out.println(Math.max(3.0, 3.00000000003));//3.00000000003
            System.out.println(Math.min(3.0, 3.00000000003));//3.0
            System.out.println(Math.random());//在0.0到1.0 之间永远不会是1.0
            System.out.println(Math.round(4.102));//4
            System.out.println(Math.round(4.4999902));//4
            System.out.println(Math.pow(2, 4));//2的4次方   16.0
            System.out.println(Math.log10(100));//2
            System.out.println(Math.log(3.0987));//1.1309826686985605
        }
    }

    三,System

    • 概述:在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

    ​                 这个类我一般称为是系统类,他可以访问一些系统的资源信息。

    • 属性:
    1. ​ in:标准输入流
    2. ​ out:标准输出流
    3. ​ err:错误输出流
    4. ​ 比如:输出语句:System.out.print(); System.out.println();
    5. ​ 解释:System.out 标准输出流
    6. ​ print()和 println()是方法是标准输出流的方法
    7. 后面又. :链式编程
    • 方法:​ arrayCopy(Object src, int srcPos,Object dest,int destPos, int length):赋值数组中的一部分内容到另一个数组中
    • ​ 参数解释:
    1. ​ src:要复制的数组【源数组】
    2. srcPos:要复制数组内容的开始角标【源数组开始复制的位置】
    3. ​ dest:接收复制内容的数组【目标数组】
    4. ​ destPos:接收内容要存放的目标数组的开始位置
    5. ​ length:要复制的内容的长度
    • 注意事项:
    1. 源数组和目标数组的类型一致
    2. 操作的索引一定要在对应的数组的索引范围内
    3. 复制长度保证在目标数组开始索引到最大索引的范围内
    4. currentTimeMillis():获取当前时间的毫秒值
    5. ​ 以1970-1-1 8:00:00开始为0计数,1毫秒为1来计数。
    6. exit(int status):jvm的状态,0表示终止jvm的运行 常用 exit(0)有点像break的效果;
    7. gc():运行垃圾回收器

    代码示例

    
    import java.util.Arrays;
    public class Demo_System {
        public static void main(String[] args) {
            int[] src = {1,2,3,4,5,6};
            int[] dest = {7,8,9,0,11,12};
    System.arraycopy(src,
    1, dest, 2, 3); System.out.println(Arrays.toString(dest));//[7, 8, 2, 3, 4, 12] System.out.println(Arrays.toString(src));//[1, 2, 3, 4, 5, 6] System.out.println(System.currentTimeMillis());//1582615495548 毫秒值 System.out.println(1582615495548L/1000/60/60/24/365); System.out.println(1582615495548L/1000/60/60/24); for (int i = 0; i < dest.length; i++) { System.out.println(dest[i]); if (i==3) { System.exit(0);//把虚拟机给关闭 } } while(true) { new Demo(); System.gc();//手动调用垃圾回收器回收不需要的对象【资源】 } } }

    四,StringBuilder

    • 概述:也是字符串表示的一种类型。
    • 好处:他表示字符串可以修改【可变】节省空间
    • 特点: 字符串可变,改变后不可逆
    • String 和StringBuilder的关系:他们都可以表示字符串形式
    • ​String一旦创建内容就不可变,要想变只能创建新的字符串对象
    • ​StringBuilder可以改变自身的内容。
    • 构造方法

    • 空参构造
    1. ​ StringBuilder():创建一个默认大小为16的没有内容的缓冲区对象
    • 有参构造
    1. ​ StringBuilder(int len):创建一个指定大小为len的没有内容的缓冲区对象
    2. ​ StringBuilder(String s):创建大小为16+s的长度的内容为s的缓冲区对象

    代码示例

    public class Demo_StringBuilder {
        public static void main(String[] args) {
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder(10);
            StringBuilder sb3 = new StringBuilder("金莲");
            System.out.println(sb1.capacity()); //16 默认值
            System.out.println(sb1.length()); //0 没有内容所以长度为0
            System.out.println(sb2.capacity()); //10 空间大小为10
            System.out.println(sb2.length()); //0 内部内容长度为0
            System.out.println(sb3.capacity()); //16+2 18 默认值为16+2
            System.out.println(sb3.length()); //2 长度为2,2个字符
        }
    }
    • 成员方法

    • 获取功能

    1. capacity():获取缓冲区空间大小
    2. length():获取缓冲区内部内容的长度
    • 添加功能:

    1. ​ append(Object o):追加字符串到缓冲区对象内容的尾部
    2. ​ insert(int offset,Object o):插入字符串到缓冲区内容指定的位置
    3. ​ 解释:

    ​                3.1   offset:   缓冲区内容的索引值

    ​                3.2    o:   插入的内容

          4.   特点:原有指定位置的内容往后顺移【不是覆盖行为】

    代码示例

    public class Demo_StringBuilder {
        public static void main(String[] args) {
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb3 = new StringBuilder("金莲");
            sb1.append(3);
            System.out.println(sb1.length());//1
            System.out.println(sb1);//3
            sb3.append("大朗");
            System.out.println(sb3);//金莲大朗
            sb3.insert(2, "庆庆");//在索引的前面插入内容值
            System.out.println(sb3);//金莲庆庆大朗
        }
    }
    • 删除功能:

    • deleteCharAt(int index):删除指定索引位置的字符
    • delete(int starindex, int endindex):删除指定范围的字符串
    • ​ 解释:
    1. ​ starindex:指定范围的开始位置
    2. ​ endindex:指定范围的结束位置后一位
    • ​ 注意:
    1. 含头不含尾
    2. 如果范围的最后值大于字符串缓冲区内容的最大的索引值;默认取到最后,不会报错

    代码示例

    public class Demo_StringBuilder02 {
        public static void main(String[] args) {
            StringBuilder sb = new StringBuilder("小鹿乃亮PGone宝宝蓉蓉");
            sb.deleteCharAt(2);
            System.out.println(sb); //删除第二个角标值的字符 小鹿亮 PGone宝宝蓉蓉
            sb.deleteCharAt(2);
            System.out.println(sb); //删除第二个角标值的字符 小鹿PGone宝宝蓉蓉
            sb.delete(2, 7);  //删除指定范围的字符串 小鹿宝宝蓉蓉
            System.out.println(sb);
            sb.delete(2, 8);   //删除第二个角标值后面所有的字符串
            System.out.println(sb);
        }
    }
    • 替换功能:

    • replace(int start, int end, String str):使用str替换指定范围的元素
    • ​ 解释:
    1. ​ start:指定范围的开始
    2. ​ end:是指定范围的结束
    3. ​ str:要替换的新内容
    • ​ 注意:
    1. 含头不含尾
    2. 如果范围的最后值大于最大的索引值默认取到最后,不会报错

    代码示例

    public class Demo_StringBuilder02 {
        public static void main(String[] args) {
            StringBuilder sb = new StringBuilder("小鹿乃亮PGone宝宝蓉蓉");
            sb.deleteCharAt(2);
            System.out.println(sb);
            sb.deleteCharAt(2);
            System.out.println(sb);
            sb.delete(2, 7);
            System.out.println(sb);
            sb.delete(2, 8);
            System.out.println(sb);
            sb.replace(0, 1, "乃亮真好");
            System.out.println(sb);//乃亮真好鹿
            sb.replace(0, 8, "乃亮真好");
            System.out.println(sb);
        }
    }
    • 反转功能:

    • reverse():把字符串内容反转
    • 转换为字符串功能:toString():把 StringBuilder 得内容变成 String 类型

    代码示例

    public class Demo_StringBuilder03 {
        public static void main(String[] args) {
            StringBuilder builder = new StringBuilder( "abcd" );
            System.out.println(builder);
            builder.reverse();
            System.out.println(builder);
            String string = builder.toString();
            System.out.println(string);
        }
    }
    • String 和 StringBuilder 相互转换:
    • ​ String 变成 StringBuilder:使用构造方法,append(String s)
    • ​ StringBuilder 变成 String :toString()方法

    练习一

    • 定义一个方法,接收一个String类型的字符串,返回该字符串的反转形式
    • 举例:接收字符串为abc,返回字符串为cba

    代码示例

    public class Demo_StringBuilder03 {
        public static void main(String[] args) {
            String ss = reverseString("abcdefg");
            System.out.println(ss);
        }
        public static String  reverseString(String  s) {
            StringBuilder builder = new StringBuilder(s);
            builder.reverse();
            return builder.toString();
        }
    }

    练习二

    • 定义一个方法,接收一个int[]类型的数组,返回该数组的字符串表示形式
    • 举例:接收数组为int[] arr = {1, 2, 3},返回的字符串为[1, 2, 3]
    • 要求:使用StringBuilder进行拼接,提高运行效率

    代码示例

    public class StringBuilder_Test02 {
        public static String getArrString(int[] arr) {
            StringBuilder builder = new StringBuilder("[");
           for (int i = 0; i < arr.length; i++) {
                if (i== arr.length-1) {
                    builder.append(arr[i]).append("]");
                }else {
                    builder.append(arr[i]).append(",");
                }
            }
            
            return builder.toString();
        }
        public static void main(String[] args) {
            int[] arr = {1,2,3};
            String ss = getArrString(arr);
            System.out.println(ss);
        }
    }
    • String和StringBuilder作为方法参数
    1. String 作为方法参数的时候,方法体对字符串进行了修改,他不会对本身的字符串产生影响
    2. StringBuilder 作为方法参数的时候,方法体对这个缓冲区对象的内容进行了修改,就会对里面的内容进行了修改

    代码示例

    public class Demo_StringBuilder04 {
        public static String getMethod(String s) {
            return s+"123";
        }
        public static String getmethod(StringBuilder sb) {
            return sb.append(123).toString();
        }
    public static void main(String[] args) { String s = "花花"; StringBuilder sb = new StringBuilder("金莲"); String string = getMethod(s); System.out.println(string);//方法产生的效果 花花123 System.out.println(s);//外接的参数 没有发生任何变化 花花 String getmethod = getmethod(sb); System.out.println(getmethod);//方法产生的效果 金莲123 System.out.println(sb);//外界的参数 金莲123 } }
    • StringBuilder和StringBuffer的对比
    • ​ 相同点:
    1. 他们都是字符串缓冲区,它里面的字符串可以改变
    2. 他们的功能是一模一样的。使用也是一模一样的使用方法
    • ​ 不同点:
    1. 出现的时机不同【StringBuffer是早期出现】
    2. StringBuffer是线程安全的,效率是低的
    3. StringBuilder是线程不安全的,效率高。【使用效率高的】
    4. StringBuffer自学内容【参考我今天的StringBuilder】
  • 相关阅读:
    hdu4726
    hdu2709
    hdu4706
    hdu4715
    快速幂取模
    快速幂
    asp.net中页面传值
    微信小程序支付
    sql 查询重复记录值取一条
    bower使用
  • 原文地址:https://www.cnblogs.com/nastu/p/12443532.html
Copyright © 2020-2023  润新知