模块十四--String/StringBuilder--尚硅谷Javase笔记总结

模块十四重点:all

第一章.String

1.String介绍

1.概述:String类代表字符串

2.特点:

a.凡是带双引号的,都是String的对象

String s="abc"

"abc"就是对象;String就是对象的数据类型;s就是对象名

b.字符串是常量,它们的值在创建之后不能更改

String s="hello"

s+="world"->会产生新对象

(图1配合理解)

c.String对象是不可变的,所以可以共享

String s1="abc"

String s2="abc"

(图2配合理解)

java 复制代码
package xyf0210_String_a;

public class Demo01String {
    public static void main(String[] args) {
        String s1="abc";
        String s2="abc";
        System.out.println(s1==s2);//true
    }
}

2.String的实现原理

3.String的创建

复制代码
1.String()->利用String的无参构造创建String对象
2.String(String original)->根据字符串创建String对象
3.String(char[] value)->根据char数组创建String对象
4.String(byte[] bytes)->通过使用平台的默认字符集解码指定的byte数组,
构造一个新的String       a.平台:操作系统 b.操作系统默认字符集:GBK
复制代码
5.简化形式:String 变量名=" "
java 复制代码
package xyf0210_String_a;

public class Demo02String {
    public static void main(String[] args) {
        //1.String()->利用String的无参构造创建String对象
        String s1=new String();
        System.out.println(s1);
        //2.String(String original)->根据字符串创建String对象
        String s2=new String("abc");
        System.out.println(s2);
        //3.String(char[] value)->根据char数组创建String对象
        char[] chars={'a','b','c'};
        String s3=new String(chars);
        System.out.println(s3);
        //4.String(byte[] bytes)->通过使用平台的默认字符集解码指定的byte数组,构造一个新的String
        byte[] bytes1={97,98,99};
        String s4=new String(bytes1);
        System.out.println(s4);
        //5.简化形式:String 变量名=" "
        String s7="abc";
        System.out.println(s7);
    }
}

4.String笔试题:

1.代码1:

java 复制代码
package xyf0210_String_b;

public class Demo03String {
    public static void main(String[] args) {
        String s1="abc";
        String s2="abc";
        String s3=new String("abc");
        System.out.println(s1==s2);//true
        System.out.println(s1=s3);//false
        System.out.println(s2==s3);//false
    }
}

内存分配:

2:

问题1:String s=new String("abc")共有几个对象?2个

一个new本身 一个是"abc"

问题2:String s=new String("abc")共创建了几个对象?1个或者2个

就看abc有没有提前创建出来了

5.字符串中的常见问题

1.字符串拼接,如果等号右边是字符串字面值拼接,不会产生新对象(s4)

2.字符串拼接,如果等号右边有变量参数拼接,会产生新字符串对象(s5,s6)

java 复制代码
package xyf0210_String_b;

public class Demo04String {
    public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        String s3="helloworld";
        String s4="hello"+"world";
        String s5=s1+"world";
        String s6=s1+s2;

        System.out.println(s3==s4);//true
        System.out.println(s3==s5);//false
        System.out.println(s3==s6);//false
    }
}

第二章.String的方法

1.判断方法

复制代码
1.boolean equals(String s)->比较字符串内容
复制代码
2.boolean equalsIgnoreCase(String s)->比较字符串内容,忽略大小写
java 复制代码
package xyf0211_Stringmethod_a;

public class Demo01String {
    public static void main(String[] args) {
        String s1="abc";
        String s2=new String("abc");
        String s3="ABC";
        System.out.println(s1==s2);//比较地址值了

       // boolean equals(String s)->比较字符串内容
        System.out.println(s1.equals(s2));
       // boolean equalsIgnoreCase(String s)->比较字符串内容,忽略大小写
        System.out.println(s1.equalsIgnoreCase(s3));
    }
}

2.练习1

已知用户名和密码,请用程序实现模拟用户登录,总共给三次机会,登录成功与否,给出相应的提示

步骤:

1.先定义两个字符串,表示注册过的用户名和密码

2.创建Scanner对象,键盘录入用户名和密码

3.比较,如果输入的用户名和密码跟已经注册过的用户名和密码一样,就登录成功,否则就登录失败

java 复制代码
package xyf0211_Stringmethod_a;

import java.util.Scanner;

public class Demo02String {
    public static void main(String[] args) {
//1.先定义两个字符串,表示注册过的用户名和密码
String username="root";
String password="123";
//2.创建Scanner对象,键盘录入用户名和密码
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请您输入用户名:");
            String name=sc.next();
            System.out.println("请您输入密码:");
            String pwd=sc.next();

//3.比较,如果输入的用户名和密码跟已经注册过的用户名和密码一样,就登录成功,否则就登录失败
        if(name.equals(username)&&pwd.equals(password)){
            System.out.println("登录成功");
        }if(i==2){
                System.out.println("账号冻结");
            }else{
            System.out.println("登录失败");
        }
        }
    }
}

防空方法:

java 复制代码
package xyf0211_Stringmethod_a;

import java.util.Objects;

public class Demo03String {
    public static void main(String[] args) {
        //String s="abc"
        String s=null;
        method(s);

        String s1="abc";
        String s2="abc";
        method01(s1,s2);
    }
    /*
    工具类:Object
    方法:判断两个对象是否相等->自带防空指针作用
    public static boolean equals(object a,Object b){
    return(a==b)||(a!=null&&a.equals(b));
    }
     */
    private static void method01(String s1,String s2){
        if(Objects.equals(s1,s2)){
            System.out.println("是abc");
        }else{
            System.out.println("不是abc");
        }
    }
    /*
    如果传递过来的对象是null,再去点其他方法,就会空指针
    解决:不要让一个字符串变量去点,用确定的字符串去点,可以防空
     */
    private static void method(String s){
       /* if(s.equals("abc")){
            System.out.println("是abc");
        }else{
            System.out.println("不是abc");
        }
        */
        if("abc".equals(s)){
            System.out.println("是abc");
        }else{
            System.out.println("不是abc");
        }
    }
}

3.获取方法:

复制代码
        1.int length()->获取字符串长度
        System.out.println(s1.length());
        2.String concat(String s)->字符串拼接,返回新串儿
        System.out.println(s1.concat("haha"));
        3.char charAt(int index)->根据索引获取对应的字符
        System.out.println(s1.charAt(0));
        4.int indexOf(String s)->获取指定字符串在大字符串中第一次出现的索引位置
        System.out.println(s1.indexOf("a"));
        5.String subString(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿
        System.out.println(s1.substring(3));
        6.String subString(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,含头不含尾,返回新串儿
        System.out.println(s1.substring(1,6))
java 复制代码
package xyf0211_Stringmethod_a;

public class Demo04String {
    public static void main(String[] args) {
        String s1="abcdefg";
        // int length()->获取字符串长度
        System.out.println(s1.length());
        // String concat(String s)->字符串拼接,返回新串儿
        System.out.println(s1.concat("haha"));
        // char charAt(int index)->根据索引获取对应的字符
        System.out.println(s1.charAt(0));
        // int indexOf(String s)->获取指定字符串在大字符串中第一次出现的索引位置
        System.out.println(s1.indexOf("a"));
        // String subString(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿
        System.out.println(s1.substring(3));
        // String subString(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,
        // 含头不含尾,返回新串儿
        System.out.println(s1.substring(1,6));
    }
}

4.转换功能

复制代码
1.char[] toCharArray()->将字符串转成char数组
2.byte[] getBytes()->将字符串转成byte数组
3.String replace(CharSequence c1,CharSequence c2)->替换字符 CharSequence->String的接口
4.byte[] getBytes(String charsetName)->按照指定的编码将字符串转成byte数组
java 复制代码
package xyf0213_Stringmethod_b;

import java.io.UnsupportedEncodingException;

public class Demo05String {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String s="abcdefg";
        //1.char[] toCharArray()->将字符串转成char数组
        char[] chars=s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }

        System.out.println("======================");

        //2.byte[] getBytes()->将字符串转成byte数组
        byte[] bytes=s.getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }

        System.out.println("======================");

        //3.String replace(CharSequence c1,CharSequence c2)->替换字符 CharSequence->String的接口
        System.out.println(s.replace("a","z"));

        System.out.println("======================");

        //4.byte[] getBytes(String charsetName)->按照指定的编码将字符串转成byte数组
        byte[] bytes1 = "你好".getBytes("utf-8");//utf-8一个中文站仨字节,GBK一个中文占俩字节
        for (int i = 0; i < bytes1.length; i++) {
            System.out.println(bytes1[i]);
        }

    }

}

5.练习2:

键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其它字符)

步骤:

1.创建Scanner对象,键盘录入

2.定义三个变量,用来统计

3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来

4.统计大写字母:

A-Z -> 65-90

比如:B->66->在65-90之间,证明就是大写字母

5.统计小写字母:

比如:b->98->在97-122之间,证明就是小写字母

6.统计数字:

0-9 ->48-57

比如:字符1-49 ->在48-57之间,证明就是数字

7.将统计结果打印出来

java 复制代码
package xyf0213_Stringmethod_b;

import java.util.Scanner;

public class Demo06String {
    public static void main(String[] args) {
//1.创建Scanner对象,键盘录入
        Scanner sc= new Scanner(System.in);
//2.定义三个变量,用来统计
int big=0;
int small=0;
int number=0;
//3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来
String data=sc.next();
char[] chars=data.toCharArray();
for (int i = 0; i < chars.length; i++) {
         char num=chars[i];
   //4.统计大写字母:
   //A-Z -> 65-90
   //比如:B->66->在65-90之间,证明就是大写字母
    if(num>='A'&&num<='Z'){
        big++;
    }
   //5.统计小写字母:
   //0-9 ->48-57
   //如:b->98->在97-122之间,证明就是小写字母
if(num>='a'&&num<='z'){
    small++;
}
   //6.统计数字:
   //0-9 ->48-57
   //比如:字符1-49 ->在48-57之间,证明就是数字
    if(num>='0'&&num<='9'){
        number++;
    }
 }
//7.将统计结果打印出来
        System.out.println("大写有"+big+"个");
        System.out.println("小写有"+small+"个");
        System.out.println("数字有"+number+"个");
    }
}

6.分割功能:

1.String[ ] split(String regex)->按照指定的规则分割字符串

注意:regex写的是正则表达式->在正则表达式中代表任意一个字符

java 复制代码
package xyf0213_Stringmethod_b;

public class Demo07String {
    public static void main(String[] args) {
        String s="abc,txt";
        String[] split = s.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }

        System.out.println("================");
        String s2="hahaha.hehe";
        String[] split1 = s2.split("\\.");
        for (int i = 0; i < split1.length; i++) {
            System.out.println(split1[i]);
        }
    }
}

第三章.其他方法

1.boolean contain(String s)->判断老串中是否包含指定的串

2.boolean endsWith(String s)->判断老串是否以指定的串结尾

3.boolean startsWith(String s)->判断老串是否以指定的串开头

4.String toLowerCase( )->将字母转成小写

5.String toUpperCase( )->将字母转成大写

6.String trim( )->去掉字符串两端空格

java 复制代码
package xyf0213_Stringmethod_b;

public class Demo08String {
    public static void main(String[] args) {
String s="abcdefg";
//        1.boolean contain(String s)->判断老串中是否包含指定的串
        System.out.println(s.contains("a"));
//        2.boolean endsWith(String s)->判断老串是否以指定的串结尾
        System.out.println(s.endsWith("g"));
//        3.boolean startsWith(String s)->判断老串是否以指定的串开头
        System.out.println(s.startsWith("a"));
//        4.String toLowerCase( )->将字母转成小写
        System.out.println("ABCDefg".toLowerCase());
//        5.String toUpperCase( )->将字母转成大写
        System.out.println("bayaDaGE".toUpperCase());
//        6.String trim( )->去掉字符串两端空格
        System.out.println("  aaa  aaa  aaa  ".trim());

        System.out.println("============================");
        //如果想去掉所有空格呢
        System.out.println("  aaa  aaa  aaa  ".replace("  ",""));
    }
}

第四章.StringBuilder类

1.StringBuilder的介绍

1.概述:一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是StringBuilder不表示同步(这意味着线程不安全,效率高)

(说白了就是属性和功能都一样)

2.作用:主要是字符串拼接

3.问题:

a.刚讲完的String就有拼接的作用,直接用+即可,那为啥还要用StringBuilder呢?

b.原因:

String每拼接一次,就会产生新的字符对象,就会在堆内存中开辟新的空间,如果拼接次数多了,就会占用内存,效率比较低

StringBuilder,底层自带一个缓冲区(没有被final修饰的byte数组)拼接字符串之后都会在此缓冲区保存,在拼接的过程中,不会随意产生新对象,节省内存

4.StringBuilder特点:

a.底层地带缓冲区,此缓冲区是没有被final修饰的byte数组,默认长度为16

b.如果超出了数组长度,数组会自动扩容

创建一个新长度的型数组,将老数组的元素复制到新数组中,然后将新数组的地址值重新赋值给老数组

c.默认每次扩容老数组的2倍+2

如果一次性添加的数据超出了默认的扩容长度(2倍+2),比如说存了36个字符,超出了第一次扩容的34,就按照实际的数据为准,在这里就是以36为扩容长度

2.StringBuilder的使用

1.构造:

StringBuilder( )

StringBuilder(String str)

java 复制代码
package xyf0213_Stringmethod_b;

public class Demo01StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        System.out.println(sb);

        StringBuilder sb1 = new StringBuilder("abc");
        System.out.println(sb1);
    }
}

常用:

StringBuilder append(任意类型数据)->字符串拼接,返回的是StringBuilder自己

StringBuilder reverse( )->字符串翻转,返回的是StringBuilder自己

String toString( )->将StringBuilder转成String->用StringBuilder拼接字符串是为了效率,为了不占内存,那么拼接完之后我们后续可能会对拼接好的字符串进行处理,就需要调用String中的方法,所以需要将StringBuilder转成String

java 复制代码
package xyf0213_Stringmethod_b;

public class Demo02StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = sb.append("张无忌");
        System.out.println(sb1);
        System.out.println(sb);
        System.out.println(sb==sb1);

        System.out.println("================");
        //链式调用,在某一个调用的基础上调用
        sb.append("赵敏").append("周芷若").append("小昭");
        System.out.println(sb);

        System.out.println("================");
        sb.reverse();
        System.out.println(sb);

        System.out.println("================");
        String s = sb.toString();
        System.out.println(s);

    }
}

练习:

键盘录入一个字符串,判断此字符串是否为"回文内容"

比如:abcba,上海自来水来自海上(正反念都以一样)

java 复制代码
package xyf0213_Stringmethod_b;

import java.util.Scanner;

public class Demo03StringBuilder {
    public static void main(String[] args) {
       //1.创建Scanner对象
        Scanner sc = new Scanner(System.in);
        String data=sc.next();
        //2.创建StringBuilder对象
        StringBuilder sb = new StringBuilder(data);
        //3.翻转
        sb.reverse();
        //4.将StringBuilder转成String
        String s=sb.toString();
        if(data.equals(s)){
            System.out.println("是回文内容");
        }else{
            System.out.println("不是回文内容");
        }

    }
}
java 复制代码
package xyf0213_Stringmethod_b;

import javax.crypto.spec.PSource;

public class Demo04StringBuilder {
    public static void main(String[] args) {
        //1.创建一个数组
        String[] arr={"妈妈","爸爸","姐姐","妹妹"};
        //2.创建StringBuilder对象
        StringBuilder sb = new StringBuilder();
        //3.先拼接左括号
        sb.append("[");
        //4.循环遍历数组,拼接元素
        for (int i = 0; i < arr.length; i++) {
            //拼接当前元素
            sb.append(arr[i]);
           if(i!=arr.length-1){
               sb.append(",");
            }
        }
        //5.拼接右括号
        sb.append("]");

        //6.把StringBuilder转成字符串并输出
        System.out.println(sb);//System.out.println(sb.toString());
    }
}

模块十四总结:

相关推荐
脏脏a2 小时前
【C++篇】面向对象编程的三大特性:深入解析继承机制
开发语言·c++·继承·组合
csdn2015_2 小时前
mybatisplus 获得新增id
java·开发语言·mybatis
ghie90902 小时前
差速转向移动机器人基于速度的动力学模型与自适应控制器 MATLAB实现
开发语言·matlab
Coder_Boy_2 小时前
从单体并发工具类到分布式并发:思想演进与最佳实践
java·spring boot·分布式·微服务
❀͜͡傀儡师2 小时前
SpringBoot渗透扫描Scan工具
java·spring boot·后端
寻寻觅觅☆2 小时前
东华OJ-基础题-124-分数化小数(C++)-难度中
开发语言·c++·算法
hanbr10 小时前
C++ 初涉
开发语言·c++
Дерек的学习记录10 小时前
C++:入门基础(下)
开发语言·数据结构·c++·学习·算法·visualstudio
hzc098765432110 小时前
Spring Integration + MQTT
java·后端·spring