《零基础学Java编程:手把手教你写出第一个可运行的程序 - 基础知识篇五》

目录

一 . 字符串的基本定义

二 . 字符串的比较

三 . 字符串常量

四 . String类对象实例化方式比较

1 . 直接赋值:String s = "hello";

2 . 构造方法:String s = new String("hello");

五 . 字符串常量池

六 . 字符串修改分析

七 . 主方法组成分析

八 . 字符串常用方法

        1 . 字符串与字符

        2 . 字符串与字节

        3 . 字符串比较

        4 . 字符串查找

        5 . 字符串替换

        6 . 字符串拆分

        7 . 字符串截取

        8 . 字符串格式化


一 . 字符串的基本定义

字符串是由多个字符组成的有序序列,在Java中字符串是对象,属于引用数据类型。Java中的字符串是不可变的(immutable),一旦创建就不能修改。

在Java中,字符串主要通过两种形式存在:

  1. 字符串字面量:如"Hello"

  2. String类对象:通过new关键字创建

String s1 = "hello";
String s2 = new String("hello");

 (博哥有话说:第一种常用,第二种多用于字符的拼接)

二 . 字符串的比较

(博哥有话说:“==” 和 “equals” 在面试题里面常见,仔细学习哦)

Java中字符串比较需要注意:

  1. == 比较的是引用地址

  2. equals() 比较的是内容

  3. compareTo() 按字典顺序比较

String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true

三 . 字符串常量

字符串常量是双引号括起来的字符序列,如"Java"。Java会为字符串常量在字符串常量池中分配内存,如果已存在相同内容的字符串,则直接引用已有的对象。

四 . String类对象实例化方式比较

1 . 直接赋值:String s = "hello";

        先在常量池查找,有则引用,无则创建

(博哥有话说:前文说过的第一种常用在这也有体现,可以节约内存,而不是每次都在堆里面创建)

2 . 构造方法:String s = new String("hello");

        每次都会在堆中创建新对象

String s1 = "hello";
String s2 = new String("hello");

五 . 字符串常量池

字符串常量池(String Pool)是Java堆内存中的特殊存储区域,用于存储字符串字面量。特点:

  • 减少内存开销

  • 提高性能

  • 可通过intern()方法将字符串手动加入池中

六 . 字符串修改分析

字符串不可变意味着:

  1. 任何修改操作(拼接、替换等)都会创建新对象

  2. 频繁修改会导致大量临时对象,影响性能

  3. 对于频繁修改的场景,应使用StringBuilder或StringBuffer

(博哥有话说:在项目中如果要对字符串进行大量的修改操作,最好使用动态字符串)

七 . 主方法组成分析

public static void main(String[] args) {
    // 程序入口
}
  • public: 访问修饰符

  • static: 静态方法

  • void: 无返回值

  • main: 方法名

  • String[] args: 命令行参数数组

八 . 字符串常用方法

(博哥有话说:以下用于测试的字符串为bogeyouhuashuo)

        1 . 字符串与字符

  • charAt(int index): 返回指定索引处的字符

  • toCharArray(): 将字符串转换为字符数组

  • length(): 返回字符串长度

public static void Test1(String s) {
        System.out.println(s.length()); // 14

        for (int i = 0; i < s.length(); i++) {
            System.out.print(s.charAt(i) + " ");
        }
        // b o g e y o u h u a s h u o

        char[] c = s.toCharArray();
        for (char value : c) {
            System.out.print(value + " ");
        }
        // b o g e y o u h u a s h u o
    }

        2 . 字符串与字节

  • getBytes(): 使用平台默认字符集将字符串编码为字节序列

  • getBytes(String charsetName): 使用指定字符集编码

public static void Test2(String s) {
        byte[] b1 = s.getBytes();
        byte[] b2 = s.getBytes(StandardCharsets.UTF_8);
    }

        3 . 字符串比较

  • equals(Object anObject): 内容比较

  • equalsIgnoreCase(String anotherString): 忽略大小写比较

  • compareTo(String anotherString): 字典顺序比较

  • compareToIgnoreCase(String str): 忽略大小写的字典顺序比较

 public static void Test3(String s) {
        String ss = "BOGEYOUHUAHSUO"; 
        System.out.println(s.equals(ss)); // false
        System.out.println(s.equalsIgnoreCase(ss)); // true
        System.out.println(s.compareTo(ss)); // 32
        System.out.println(s.compareToIgnoreCase(ss)); // 0
    }

        4 . 字符串查找

  • indexOf(int ch): 返回字符第一次出现的索引

  • lastIndexOf(int ch): 返回字符最后一次出现的索引

  • contains(CharSequence s): 是否包含指定字符序列

  • startsWith(String prefix): 是否以指定前缀开始

  • endsWith(String suffix): 是否以指定后缀结束

public static void Test4(String s) {
        for (int i = 0; i < s.length(); i++) {
            System.out.print(s.charAt(i) + " ");
        }
        System.out.println(s.lastIndexOf('e'));// 3
        System.out.println(s.contains("boge"));// true
        System.out.println(s.startsWith("boge"));// true
        System.out.println(s.endsWith("boge"));// false
    }

        5 . 字符串替换

  • replace(char oldChar, char newChar): 字符替换

  • replace(CharSequence target, CharSequence replacement): 字符序列替换

  • replaceAll(String regex, String replacement): 正则替换

  • replaceFirst(String regex, String replacement): 替换第一个匹配项

public static void Test5(String s) {
        String regex = "\\w{4}";
        String ss = "----";
        System.out.println(s.replace('e','E'));// bogEyouhuashuo
        System.out.println(s.replace("boge","BOGE"));// BOGEyouhuashuo
        System.out.println(s.replaceAll(regex,ss));// ---- ---- ---- uo
        System.out.println(s.replaceFirst(regex,ss));// ---- youhuashuo
    }

        6 . 字符串拆分

  • split(String regex): 按正则表达式拆分

  • split(String regex, int limit): 限制拆分次数

public static void Test6(String s) {
        String regex = "\\s+";
        System.out.println(Arrays.toString(s.split(regex)));// [boge, youhua, shuo]
        System.out.println(Arrays.toString(s.split(regex, 1)));// [boge youhua shuo]
    }

        7 . 字符串截取

  • substring(int beginIndex): 从指定索引截取到末尾

  • substring(int beginIndex, int endIndex): 截取指定范围

public static void Test7(String s) {
        System.out.println(s.substring(4)); //  youhuashuo
        System.out.println(s.substring(4,6)); //  yo
    }

        8 . 字符串格式化

  • format(String format, Object... args): 格式化字符串

  • String.format(): 静态格式化方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博哥爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值