强哥说Java--Java String和StringBuilder(一)

简介: 强哥说Java--Java String和StringBuilder(一)

1. String 对象的创建



String对象的创建有两种方式。


第1 种方式就是我们最常见的创建字符串的方式:


String str1 = "8/24";


第 2 种方式是对象实例化的方式,使用new关键字,并将要创建的字符串作为构造参数:


String str2 = new String("8/25");


如果调用 String 类的无参构造方法,则会创建一个空字符串:


String str3 = new String();


这种方式很少使用。


2. 获取字符串长度



可以使用length()方法来获取字符串的长度。例如:


实例演示


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "8/24";
         int a = str1.length();
         System.out.println(a);
     }
 }


运行结果:

4

3. 字符串查找



3.1 获取指定位置字符


可以使用char charAt(int index)方法获取字符串指定位置的字符。它接收一个整型的index参数,指的是索引位置,那什么是索引位置呢?例如,有一字符串I love Java,其每个字符的索引如下图所示:


image.png


可以从图示中看出,索引下标从0开始。假如我们要获取字符C,则为方法传入参数2即可:


实例演示


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "ABCDEFG";
         char a = str1.charAt(4);
         System.out.println(a);
     }
 }


运行结果:

E

 

3.2 查找字符串位置


这里介绍查找字符串位置的两个方法:


indexOf() 获取字符或子串在字符串中第一次出现的位置。


lasIndexOf() 获取字符或子串在字符串中最后一次出现的位置。


这里的子串指的就是字符串中的连续字符组成的子序列。例如,字符串Hello就是字符串Hello Java的子串。


indexOf()


1 获取字符在字符串中第一次出现的位置:


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "ABCDEFG";
         int a = str1.indexOf('G');
         System.out.println("字符A在字符串str1第一次出现的位置为:"+ a);
     }
 }


字符A在字符串str1第一次出现的位置为:6

2 获取子串在字符串中第一次出现的位置:


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "I just poor boy,I needn`t sympathy";
         int a = str1.indexOf('I');
         System.out.println("字串I在字符串str1第一次出现的位置为:"+ a);
     }
 }


字符I在字符串str1第一次出现的位置为:0


lastIndexOf()


1 获取字符在字符串中最后一次出现的位置:


package com.caq.oop.demo08;
public class Test {
    public static void main(String[] args) {
        String str1 = "I just poor boy,I needn`t sympathy";
        int a = str1.lastIndexOf("I");
        System.out.println("字串I在字符串str1最后一次出现的位置为:"+ a);
    }
}


字串I在字符串str1最后一次出现的位置为:16

2 获取子串在字符串中最后一次出现的位置:


package com.caq.oop.demo08;
public class Test {
    public static void main(String[] args) {
        String str1 = "I love LYF and I love PYY";
        int a = str1.lastIndexOf("I love");
        System.out.println("子串I love在字符串str1最后一次出现的位置为:"+ a);
    }
}


运行结果:


子串I love在字符串str1最后一次出现的位置为:15

需要特别注意的是,以上方法的参数都是区分大小写的。如果你找了个不存在的,上述方法都会返回一个整型值:-1。我们来看以下示例:


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "I love LYF and I love PYY";
         int a = str1.lastIndexOf("QQ");
         System.out.println("子串QQ在字符串str1最后一次出现的位置为:"+ a);
     }
 }



子串QQ在字符串str1最后一次出现的位置为:-1

可以看到结果是-1


4. 字符串截取



字符串的截取也称为获取子串


可以使用substring()方法来获取子串


String类中有两个重载的实例方法:


String substring(int beginIndex) 获取从beginIndex位置开始到结束的子串。


String substring(int beginIndex, int endIndex) 获取从beginIndex位置开始到endIndex位置的子串(不包含endIndex位置字符)


image.png


关于这两个方法的使用,我们来看一个实例:


实例演示


package com.caq.oop.demo08;
 public class Test {
     public static void main(String[] args) {
         String str1 = "I just poor boy,I need no sympathy";
         String a = str1.substring(15);
         String b = str1.substring(8,12);
         System.out.println("从15到最后的字符串"+ a);
         System.out.println("从8到12的字符串"+ b);
     }
 }


运行结果:


从15到最后的字符串,I need no sympathy

从8到12的字符串oor

要特别注意,方法签名上有两个参数的substring(int beginIndex, int endIndex)方法


截取的子串不包含endIndex位置的字符。


相关文章
|
3月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
44 0
java基础(13)String类
|
12天前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
18天前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
2月前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
123 65
|
29天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
41 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
12天前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
28天前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
54 7
|
1月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
2月前
|
存储 SQL 安全
Java零基础-StringBuilder类详解
【10月更文挑战第12天】Java零基础教学篇,手把手实践教学!
33 5
|
2月前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第13天】Java零基础教学篇,手把手实践教学!
57 1
下一篇
DataWorks