String类

简介: 想必大家在学习c语言的时候已经涉及到了字符串了,但是在c语言中字符串只能使用字符数组或者字符指针,可以用库函数完成大部分操作。但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。接下来我带讲一下java中的String类,希望对大家有所帮助。

目录


一.认识 String 类


二.常用方法


1.字符串构造(定义)


2.字符串指为空和null


3.String对象的比较


(1)equals和==的区别


(2)compareTo比较


4.字符串查找


5.字符串转化


(1)数值和字符串转化


(2)大小写转换


(3)字符串数组互转


6.字符串的不可变性


7.字符串的其他操作


三.StringBuilder和StringBuffer


一.认识 String 类

想必大家在学习c语言的时候已经涉及到了字符串了,但是在c语言中字符串只能使用字符数组或者字符指针,可以用库函数完成大部分操作。但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。接下来我带讲一下java中的String类,希望对大家有所帮助。


二.常用方法

1.字符串构造(定义)

String类提供的构造方式非常多,常用的就以下三种:

public static void main(String[] args) {
        // 使用常量串构造
        String s1 = "hello bit";
        System.out.println(s1);
        // 直接newString对象
        String s2 = new String("hello bit");
        System.out.println(s1);
        // 使用字符数组进行构造
        char[] array = {'h','e','l','l','o','b','i','t'};
        String s3 = new String(array);
        System.out.println(s1);
    }

注意:区别与c语言,java中的字符串没有以 \0 结尾的说法。


2.字符串指为空和null

大家注意下面代码,我会通过代码解释

    public static void main(String[] args) {
        //字符串为空
        String str1 = "";
        System.out.println(str1.isEmpty());//判断字符串是不是空的
        //字符串指向null,str2这个引用 不指向任何的对象,下面判断为空的时候会报错
        String str2 = null;
        System.out.println(str2.isEmpty());
    }

所以我们可以知道字符串为空和字符串=null不是一个概念。


3.String对象的比较

(1)equals和==的区别

如果是new一个字符串的话 比较字符串里面的值是否相同用 引用1.equals(引用2),判断两个字符串地址是否相同用 引用1 == 引用2。

    public static void main(String[] args) {
        String str1 = new String("abcd");
        String str2 = new String("abcde");
        System.out.println(str1 == str2);//flase
        System.out.println(str1.equals(str2));//true
    }

b6fca4a9ab7cc4d005a1773f0cd2fdf4_3d0dc263c661418ca41b7fe7b7405717.png

如果是直接赋值的话用==也能判断字符串的值是否相同(这里会涉及到哈希值,由于小编现在能力有限,等以后会再讲解)

public static void main(String[] args) {
        String str3 = "abcd";
        String str4 = "abcde";
        System.out.println(str3 == str4);//ture 字符串常量池 有哈希表的基础
    }

2607fc0d8d468510446e25b34cc75312_2b06996885c74ea2b24f00884133c10f.png

(这里注意:如果str1和str2里面的内容相同的话,如都是abc,在常量池中只会存一个abc)


(2)compareTo比较

 

    public static void main3(String[] args) {
        String str1 = "abcd";
        String str2 = "abcdef";
        //str1大于str2 那么 返回正数  如果不大于 返回负数  如果相同 返回0
        System.out.println(str1.compareTo(str2));//-2
        /**
         * 比较逻辑:
         * 1. 如果两个字符串的长度是一样的,那么第一个不一样的字符的大小就是整个字符串的大小
         * 2. 如果两个字符串长度不一样,那么先比较两个长度的差值个
         * 3、在这个差值范围内,有不一样的字符就能比较出来大小
         * 4、但是如果都是一样的,那么就看谁长 谁大 !
         */
    }

忽略大小写比较:

public static void main4(String[] args) {
        String str1 = "Abcd";
        String str2 = "abcd";
        //忽略大小写进行 比较
        System.out.println(str1.compareToIgnoreCase(str2));//0
    }

4.字符串查找

 

    public static void main(String[] args) {
        String str1 = "abcdef";
        //获取指定位置的字符
        char ch = str1.charAt(2);//c
        System.out.println(ch);
        //从3的位置找c开始出现的位置,没有返回-1
        int index = str1.indexOf('c',3);
        System.out.println(index);//-1
        String str2 = "ababcdabcdef";
        //从5开始 从后往前找a出现的位置
        int index2 = str2.lastIndexOf('a',5);
        System.out.println(index2);//2
    }

dfd19aed77cb5e446556d08c8e617be4_8af80cb9887341aaa27529df980e465e.png


5.字符串转化

(1)数值和字符串转化

public static void main(String[] args) {
    // 数字转字符串
    String s1 = String.valueOf(1234);
    String s2 = String.valueOf(12.34);
    String s3 = String.valueOf(true);
    String s4 = String.valueOf(new Student("Hanmeimei", 18));
    // 字符串转数字
    // 注意:Integer、Double等是Java中的包装类型,这个后面会讲到
    int data1 = Integer.parseInt("1234");
    double data2 = Double.parseDouble("12.34");
}

(2)大小写转换

 

public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
        // 小写转大写
        System.out.println(s1.toUpperCase());
        // 大写转小写
        System.out.println(s2.toLowerCase());
    }

(3)字符串数组互转

public static void main(String[] args) {
        String s = "hello";
        // 字符串转数组
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        } 
        // 数组转字符串
        String s2 = new String(ch);
        System.out.println(s2);
    }

6.字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变,字符串不可被修改。


所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象,如:


1.字符串的指定字符的转化,转化的时候是新new一个对象进行转化


2.字符串的相加,也是new一个对象进行相加,不是在原来的对象中进行相加


7.字符串的其他操作

146473df86e094b03acd22bf3cd56850_a4083ecbe0404f90a1ae28e22b0ee0a4.png92a6f6824a91071704521915bee3a950_8ade15c967fd488b932251ab6266b266.png

三.StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法,其它需要用到了大家可参阅Java Platform SE 8


目录
相关文章
|
11天前
|
安全 程序员 C++
C++ --> string类的使用(详细介绍)
C++ --> string类的使用(详细介绍)
26 5
|
11天前
|
存储 编译器 C语言
C++ --> string类模拟实现(附源码)
C++ --> string类模拟实现(附源码)
35 4
|
11天前
|
安全 Java
12 Java常用类(二)(String类+时间类+BigDecimal类等等)
12 Java常用类(二)(String类+时间类+BigDecimal类等等)
23 2
|
1天前
|
缓存 安全 Java
【揭秘】String vs StringBuilder vs StringBuffer:三大字符串类的秘密较量!你真的知道何时该用哪个吗?
【8月更文挑战第19天】探讨Java中`String`、`StringBuilder`与`StringBuffer`的区别及应用场景。`String`不可变,适合做哈希表键或多线程共享。`StringBuilder`支持动态修改字符串,适用于单线程环境以提高性能。`StringBuffer`与`StringBuilder`功能相似,但线程安全。示例代码展示各类型的基本用法。选择哪种类型取决于具体需求和性能考量。
|
7天前
|
编译器 C语言 C++
【C++】模拟实现string类
【C++】模拟实现string类
|
7天前
|
存储 算法 C语言
【C++】认识使用string类
【C++】认识使用string类
|
1月前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
1月前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
1月前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
1月前
|
存储
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()