# Java_String

String

1. 概述

java.lang.String类 代表字符串,Java程序中所有字符串文字 例如“abcd” 都为 此类的对象

String name = "abcd";

注意:字符串的内容是不会改变的,在对象创建后不能更改。
字符串拼接产生一个新的字符串。

String A = "hello";
String B = "world";
System.out.println(A+B);
  1. 创建String对象的两种方式:直接赋值 和 new
1.1直接赋值
String name = "爪洼"; //直接赋值
public String(); //创建空白字符串,不包含任何内容
public String(String original); //根据传入的字符串,创建字符串对象
public String(byte[] chs); //根据字节数组,创建字符串对象

2 使用new的方式来获取一个字符串对象
2.1 空参构造:可以获取一个空白的字符串对象
String s1 = new String();
System.out.println("?" + s1 + "?");// ? ?
2.2传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
String s2 = new String("abc");
System.out.println(s2);//abc
2.3根据字符数组,创建字符串对象

需求:修改字符串中的内容,修改字符数组对应的索引即可

public String(char[] chs); //根据字符数组,创建字符串对象

char[] chs ={'a','b','c','d'};
String s3 = new String(chs);
System.out.println(s3); //abcd 
2.4传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象

需求:在网络中传输的数据都是字节信息,一般把字节信息进行转换,转成字符串,此时就要用到这个构造

byte[] bytes = {97,9,99,100};
String s4 = new String(bytes);
System.out.println(s4);//abcd

2.StringTable 串池,字符串常量池

package String;

public class test {
    public static void main(String[] args){
        String s1 = "abc";
        String s2 = "abc";
      
    }
}
1.当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在,不存在则创建新的,存在则直接使用。好处是可以节约内存

请添加图片描述

2.当使用new创建字符串时,每new一次,就是在堆区创建一个新的小空间。坏处是如果字符串重复,会浪费内存。
package String;

public class test {
    public static void main(String[] args){
        char[] chs = {'a','b','c'};
        String s1 = new String(chs);
        String s2 = new String(chs);

    }
}

请添加图片描述

3.字符串比较

3.1 == 号

(1) 如果是基本数据类型,比较的是数据值

int a = 10;
int b = 20;
System.out.println(a==b); //false

(2) 如果是 引用数据类型,比较的是地址值

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1==s2); //false

例子:

String s1 = "abc"; //在串池中创建
String s2 = "abc"; //已存在,直接使用
System.out.println(s1==s2); //true,指向同一个地址
String s1 = new String("abc"); //记录堆中的地址值
String s2 = "abc"; //记录串池中的地址值
System.out.println(s1==s2); //false
3.2 使用关键字比较

(1) equals(要比较的字符串): 必须完全一样
(2) equalsIgnoreCase(要比较的字符串) :能忽略大小写

两者的返回值都是boolean类型

String s1 = new String("abc");
String s2 = "Abc";
        
boolean result1 = s1.equals(s2);
System.out.println(result1);//false

boolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2);//true
  • 键盘录入的String本质是什么?
//1.假设先用键盘录入一个abc
Scanner sc = new Scanner(System.in);
System.out.println("输入一个字符串");
String str1 = sc.next();

//2.再通过String定义一个abc
String str2 = "abc";

//3.用 == 比较这两者
System.out.println(str1==str2); //false

可见两者是不一样的,键盘录入的是new出来的

4.遍历和统计字符串

逐个遍历字符串中的每个字符

public char charAt(int index); //根据索引返回字符

import java.util.Scanner;

public class test {
    public static void main(String []args){
    
    //输入![请添加图片描述](https://img-blog.csdnimg.cn/direct/9d2d9c6a9faf4d51bfdfad7ed814111b.png)

        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个字符串:");
        String str = sc.next();

        //开始遍历
        for(int i=0;i<str.length();i++){
            //i依次表示字符串的每一个索引
            char c = str.charAt(i);
            System.out.println(c);
        }

    }
}

请添加图片描述

案例:统计字符串中 大小写字母字符 数字字符的出现次数
import java.util.Scanner;

public class test {
    public static void main(String []args){

        //1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个字符串");
        String str = sc.next();

        //统计
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        for (int i = 0; i < str.length(); i++) {
            //i表示每一个字符的索引
            char c = str.charAt(i);
            if(c>='a'&&c<='z'){
                smallCount++;
            }
            else if(c>='A'&&c<='Z') {
                bigCount++;
            }
            else if(c>='0'&&c<='9'){
                numberCount++;
            }
        }

        System.out.println("小写字母有:" + smallCount + "个");
        System.out.println("大写字母有:" + bigCount + "个");
        System.out.println("数字字符有:" + numberCount + "个");
    }
}

请添加图片描述

案例:对输入的字符串进行反转输出
import java.util.Scanner;

public class test {
    public static void main(String []args){
        Scanner sc = new Scanner(System.in);

        System.out.println("输入一个字符串:");
         String str = sc.next();

         System.out.println( reverser(str));

    }
    ![请添加图片描述](https://img-blog.csdnimg.cn/direct/898ac818c39247f2b5da016fe4600ae4.png)


    public static String reverser(String str){
        String result  = "";
        for (int i = str.length()-1; i >= 0; i--) {
            char c = str.charAt(i);
            result = result + c;
        }

        return result;
    }
}

请添加图片描述

未完…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值