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】
原文地址:https://www.cnblogs.com/nastu/p/12443532.html