String类中的api

一、Obiect 

1、''==''和equals的区别

 ==eqquls

在比较基本类型的数据时

比较的是数值是否相同

在没有重写时比较的是两个对象的内存地址是否相同

在对比引用数据类型时

比较的是地址是否相同

重写后比较的是两个对象的内容是否相同

特别注意:理论上重写equals方法必须重写hashCode方法,理论上两个对象的equals相等那么他们的hashCode必须一致,例如s1.equals(s2) = true,则s1.hashCode则必须等于s2.hashCode,同一个类的两个对象的equals相等,则hash code必须一致,但是反过来则不一定;

2、String

1、解释字符串是一个常量--被创建完成后不能被改变;

 特别注意上图中的MethodArea在jdk1.8后被合并到heap中用永久代(Parmanent)和元空间(MetaSpace)来代替了;

3、字符串的+拼接运算,底层默认调用了StringBuilder中的append方法。如果拼接的字符串数量相对较少,那么可以使用+拼接运算;如果拼接的字符串数量较多,那么建议用StringBuilder

StringBuilder加append()后产生的对象返回的是一个StringBuilder对象,所以后面一半使用toSring方法来转化为字符串;特别注意:toString底层调用的是一个新的new String转化的方式;

4、String中提供了很多操作,但是并不会改原字符串的操作:比如concat()

String s1 = "abc";
s1.concat("def");
system.out.print(s1)//s1=abc
//下面一种会改变

String s1 = "abc";
String s1=s1.concat("def");
system.out.print(s1)//s1=abcdef

5、常用的函数

//底层维数组--所以传入想要查找的下标即可;
charAt(int index)

//比较两个字符串是否相等(严格来讲比较两个字符串的大小)
//底层获取两个字符串对应位置上的元素--然后逐位相减-不相等则返回字符串之差
                                相同则返回字符串长度之差
               结果:正数---s1>s2; 0 --- s1=s2; 负数 --- s1<s2;
compareTo()

compareToIngoreCase()//忽略大小写    
concat()//拼接
contains()// 包含   
endWith()
startWith()
equals()//底层默认重写了--所以在比较字符串时--结果为比较两个字符串的内容是否一致;

6、字节和字节数组的转化过程;

 7、获取指定子串在第一次出现的下标

String str = “hdahfakfnalkf“

String sub = ”e“

sout(str.indexOf(sub));//找不到则返回-1----里面也可以指定从指定下标的位置往后找;传两个参数即可;

练习:获取指定元素所有的下标

8、截取子串在java中用

substring(3)//在下标为3 的位置到末尾

substring(3,6)//在下标为3 的位置到6[3,6)--一半包小不包大;

9、toCharArray();//将字符串转化为字符数组

      new String(cs) //将字符数组转化为字符串输出--可以指定转化范围(cs,3,4)

10、转化大小写 toLowCase();toUpperCase();

11、去掉字符串的前部和尾部空白 trim()

12、将参数转化为字符串;String s1 = String.valueOf(3);//底层默认转化为字符串toString操作

13、对于对象而言,底层相当于调用了对象的toString方法---结果为对象的地址

14、char[] 数组的valueOf()和toString()不一样;因为它的valueof底层没有调用toString方法所以产生的结果一个是字节,一个是地址;

15、正则表达式知识点: 

        // 匹配:由字母开头的长度至少为2的字符串
        // + 至少一次 x>=1
        String s1 = "d 4";
        System.out.println(s1.matches("[A-Za-z].+"));

        // 匹配:由字母开头的字符串
        // * 可有可无 x>=0
        String s2 = "a";
        System.out.println(s2.matches("[a-zA-Z].*"));

        // 匹配:由字母开头的长度不超过2的字符串
        // ? 至多一次 x<=1
        String s3 = "A2";
        System.out.println(s3.matches("[a-zA-Z].?"));

        // 判断字符串中是否有数字
        String s4 = "o4p";
        System.out.println(s4.matches(".*\\d.*"));
        
        // 匹配:由5个字母组成的字符串
        // {n} 表示恰好n次 x=n
        String s1 = "abcde";
        System.out.println(s1.matches("[a-zA-Z]{5}"));

        // 匹配:由至少5个字母组成的字符串
        // {n,} 表示至少n次 x>=n
        String s2 = "abcdef";
        // System.out.println(s2.matches("[a-zA-Z]{4}[a-zA-Z]+"));
        System.out.println(s2.matches("[a-zA-Z]{5,}"));

        // 匹配:由5-8个字母组成的字符串
        // {n,m} 表示至少n次不超过m次 n <= x <= m
        String s3 = "abcdefgh";
        System.out.println(s3.matches("[a-zA-Z]{5,8}"));

        // 在正则表达式中,用()括起来的部分,称之为捕获组
        // 捕获组是有编号的,编号默认从1开始
        // 可以通过\x的方式来引用编号为x的捕获组
        // 捕获组的编号按照左半边(出现的位置来依次计算的
        // 例如(AB(C(D)E))(F)
        // \1   AB(C(D)E)
        // \2   C(D)E
        // \3   D
        // \4   F
        // 匹配:至少包含2个"abc"的字符串
        String s1 = "sabc5a3s3s";
        System.out.println(s1.matches(".*(abc).*\\1.*"));

        // 匹配:叠字
        // 例如:嘻嘻嘻,哈哈哈哈哈哈哈哈,嗯嗯
        String s2 = "嘻嘻嘻";
        System.out.println(s2.matches("(.)\\1+"));

        // 匹配:AABB式词语
        // 例如开开心心,嘻嘻哈哈
        String s3 = "高高兴兴";
        System.out.println(s3.matches("(.)\\1(.)\\2"));

        // 匹配:ABAB式词语
        // 例如:活动活动,溜达溜达
        String s4 = "活动活动";
        System.out.println(s4.matches("(..)\\1"));

        // 对数据进行替换

        String s1 = "d3hgol23dgn20psn2";
        // 将数组替换为-
        System.out.println(s1.replaceAll("[0-9]", "-"));
        // 去掉所有小写字母
        System.out.println(s1.replaceAll("[a-z]", ""));

        // 在replaceAll方法中,可以用$x形式来引用编号为x的捕获组
        String s2 = "Amy Bob Can Danny Eden Fred Grace";
        // 交换Can和Eden的顺序
        System.out.println(s2.replaceAll("(.*)(Can)(.*)(Eden)(.*)", "$1$4$3$2$5"));
        // 叠字的替换
        String s3 = "我我我我我我我我我我我爱爱爱爱爱学学学学学学学学学学学习习习";
        System.out.println(s3.replaceAll("(.)\\1+", "$1"));

        // split - 对字符串进行切分
        String str = "4158dnl3dio2fnl04dfgnl351";
        // 以数字作为切分符号,将字符串进行切分
        // 如果切分符号是相邻的,那么会且分出""
        // 如果切分符号在末尾,那么会将整个切分符号给切掉
        String[] arr = str.split("\\d");
        System.out.println(Arrays.toString(arr));


 16、正则练习:---

1、判断字符串是否是小数--

System.out.println(str.matches("0\\.\\d+|[1-9]\\d*\\.\\d+"));

2、判断是否是8~16的密码--其中包含大小写字母、数字和特殊符号;

// 获取密码
        Scanner s = new Scanner(System.in);
        String password = s.nextLine();
        // 判断密码的长度
        // if (password.length() < 8 || password.length() > 16) return;
        if (!password.matches(".{8,16}")) {
            System.out.println("不合格");
            return;
        }
        // 定义一个变量来记录出现的符号个数
        int i = 0;
        // 判断大写字母
        if (password.matches(".*[A-Z].*")) i++;
        // 判断小写字母
        if (password.matches(".*[a-z].*")) i++;
        // 判断数字
        if (password.matches(".*[0-9].*")) i++;
        // 判断符号(_ .#)
        if (password.matches(".*[_ \\.#].*")) i++;
        System.out.println(i >= 3 ? "合格" : "不合格");

17、string中math的常用函数

        // 圆周率
        System.out.println(Math.PI);

        // 立方根
        System.out.println(Math.cbrt(27));

        // 平方根
        System.out.println(Math.sqrt(81));
        // 判断一个数字是否是完全平方数
        int n = 10;
        int sqrt = (int) Math.sqrt(n);
        System.out.println(sqrt * sqrt == n);

        // 向上取整
        System.out.println(Math.ceil(2.4));
        // 向下取整
        System.out.println(Math.floor(3.98));
        // 四舍五入
        System.out.println(Math.round(3.51));

        // 指数 -> 2^5
        System.out.println(Math.pow(2.5, 3.7));
// 获取0<=n<1的伪随机数
        System.out.println(Math.random());
        // 获取0~100之间的随机整数
        int i = (int) (Math.random() * 100);
        System.out.println(i);
        // 获取20~50之间的随机整数
        int i2 = (int) (Math.random() * 30 + 20);
        System.out.println(i2);
        // 生成6位数字验证码
        StringBuilder sb = new StringBuilder();
        for (int j = 0; j < 6; j++) {
            int n = (int) (Math.random() * 10);
            sb.append(n);
        }
        System.out.println(sb.toString());

练习--模拟双色球(彩票)

// 双色球
        // 定义数组来表示红球
        // 用true表示这个红球被选中了,用false表示红球没有选中
        boolean[] reds = new boolean[35];
        // 定义变量记录红球的个数
        int n = 0;
        System.out.println("红球:");
        while(n < 6){
            // 选取红球
            int i = (int) (Math.random() * 35);
            // 判断求之前是否被选中过
            if (reds[i]) continue;
            System.out.print(i + 1 + "\t");
            // 标记红球
            reds[i] = true;
            n++;
        }
        System.out.println();
        System.out.println("蓝球:");
        System.out.println((int) (Math.random() * 16 + 1));

 18、bigDecimal

// strictfp关键用在方法上,在方法计算过程中,要求小数以34位小数来进行计算
    // 最后计算完成之后,会舍弃掉多余部分的小数
    public static /*strictfp*/ void main(String[] args) {

        System.out.println(3.02 - 2.87);
        // BigDecimal bd1 = new BigDecimal(3.02);
        // BigDecimal bd2 = new BigDecimal(2.87);
        BigDecimal bd1 = new BigDecimal("3.02");
        BigDecimal bd2 = new BigDecimal("2.87");
        System.out.println(bd1.subtract(bd2));

  BigInteger bi1 = new BigInteger("458741217827854548455665863512373996");
        BigInteger bi2 = new BigInteger("12492748935896136842456016657858759812659813941635254106");
        // 求和
        System.out.println(bi1.add(bi2));
        // 求差
        System.out.println(bi1.subtract(bi2));
        // 求积
        System.out.println(bi1.multiply(bi2));

// 0和#
        // 0表示必须出现,#表示可以出现可以没有
        // .之前,#只能出现0之前 #0.00 #0.0#
        // .之后,#只能出现0之后 0.0# 0.#
        DecimalFormat df = new DecimalFormat("00.00");
        String str = df.format(312.589);
        System.out.println(str);

19、Date

// 获取Calendar对象
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        // 指定日期
         Calendar c2 = Calendar.getInstance();
        c2.set(2022, 5, 1);
        System.out.println(c2);
        // 获取是这个周的第几天
        int i = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(i);

//
        // 构建日期对象
        // 如果不指定,那么默认情况下,获取的是当前的日期对象
        Date date = new Date();
        System.out.println(date);
        // 传入的参数表示从1970年01月01日00:00:00到指定时间的毫秒值
        Date date2 = new Date(1689745676848L);
        System.out.println(date2);
        // 日期格式化 年-月-日
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String fd = sdf.format(date);
        System.out.println(fd);
        // 指定字符串,转化为日期格式
        String str = "2022年05月20日";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        Date pd = sdf2.parse(str);
        System.out.println(pd);

//
        // LocalDate表示日期的类,不包含时间
        // 获取当前的日期
        LocalDate d1 = LocalDate.now();
        System.out.println(d1);
        // 指定日期
        LocalDate d2 = LocalDate.of(2022, 5, 1);
        System.out.println(d2);

        // 判断日期是否是一个闰年
        System.out.println(d1.isLeapYear());
        // 判断指定日期的早晚
        System.out.println(d1.isBefore(d2));
        System.out.println(d1.isAfter(d2));

        // 三周之后
        System.out.println(d1.plus(3, ChronoUnit.WEEKS));

        // 星期几
        System.out.println(d2.getDayOfWeek());

//

        // LocalTime只有时间没有日期
        // 获取当前的时间
        LocalTime t1 = LocalTime.now();
        System.out.println(t1);
        // 指定时间
        LocalTime t2 = LocalTime.of(13, 21, 45);
        System.out.println(t2);

               

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.String和byte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) StringString replace(char oldChar, char newChar) String replace(CharSequence target, CharSequence replacement) String[] split(String regex) boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引 int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引 int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始 boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始 int length():返回字符串的长度: return value.length char charAt(int index): 返回某索引处的字符return value[index] boolean isEmpty():判断是否是空字符串:return value.length == 0 String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写 String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写 String trim():返回字符串的副本,忽略前导空白和尾部空白 boolean equals(Object obj):比较字符串的内容是否相同 boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写 String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+” String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。 String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值