Java 的字符串操作(一)

  1. 字符串的定义

    • 在 Java 中,字符串是一个对象,它是java.lang.String类的实例。可以通过以下两种常见方式定义字符串:

      • 直接赋值:String str = "Hello World";,这种方式简单直接,Java 会自动在字符串常量池中查找是否已经存在相同内容的字符串,如果有就直接引用,没有则创建新的字符串对象并放入常量池。

      • 使用new关键字:String str = new String("Hello World");,这种方式会在堆内存中创建一个新的字符串对象,即使字符串常量池中已经存在相同内容的字符串。不过一般情况下,推荐使用直接赋值的方式,因为它更高效。

  2. 字符串的不可变性

    • 字符串对象一旦创建,其内容是不可改变的。例如:

      • String str = "Hello";

      • str = str + " World";

      • 在这个例子中,并不是在原来的"Hello"字符串对象上添加" World",而是创建了一个新的字符串对象,其内容为"Hello World",然后将str引用指向这个新的对象。原来的"Hello"字符串对象仍然存在于内存中(如果没有被垃圾回收),但是str不再引用它。

  3. 字符串的常用方法

    • 获取字符串长度:

      • 可以使用length()方法来获取字符串的长度。例如:String str = "Java"; int len = str.length();,这里len的值为 4。

    • 获取指定位置的字符:

      • 使用charAt()方法。例如:String str = "Python"; char c = str.charAt(2);,这里c的值为't',因为字符串的索引是从 0 开始的。

    • 字符串连接:

      • 可以使用+运算符或者concat()方法。例如:

        • 使用+运算符:String str1 = "Hello"; String str2 = " World"; String result = str1 + str2;result的值为"Hello World"

        • 使用concat()方法:String str1 = "Good"; String str2 = " morning"; String result = str1.concat(str2);,同样result的值为"Good morning"

    • 字符串比较:

      • equals()方法:用于比较两个字符串的内容是否相等。例如:String str1 = "Java"; String str2 = "Java"; boolean isEqual = str1.equals(str2);,这里isEqual的值为true。需要注意的是,==运算符比较的是两个字符串对象的引用是否相同,而不是内容。例如:String str1 = "Java"; String str2 = new String("Java"); boolean refEqual = str1 == str2;,这里refEqual的值为false,因为str1str2是不同的对象引用,但是str1.equals(str2)的值为true

      • compareTo()方法:按照字典顺序比较两个字符串。如果调用该方法的字符串小于参数中的字符串,则返回一个负整数;如果相等,返回 0;如果大于,返回一个正整数。例如:String str1 = "apple"; String str2 = "banana"; int compareResult = str1.compareTo(str2);,这里compareResult的值小于 0,因为"apple"在字典顺序中排在"banana"之前。

    • 字符串查找:

      • indexOf()方法:用于查找指定字符或子字符串在字符串中第一次出现的位置。如果找不到,则返回 - 1。例如:String str = "Hello World"; int index = str.indexOf('o');,这里index的值为 4,因为字符'o'第一次出现在索引为 4 的位置。如果查找子字符串,如int subIndex = str.indexOf("World");subIndex的值为 6。

      • lastIndexOf()方法:与indexOf()类似,但是它是查找指定字符或子字符串在字符串中最后一次出现的位置。例如:String str = "Hello World Hello"; int lastIndex = str.lastIndexOf("Hello");,这里lastIndex的值为 12。

    • 字符串截取:

      • substring()方法:可以用来截取字符串的一部分。有两种重载形式,一种是substring(int beginIndex),它从指定的索引位置开始截取到字符串末尾。例如:String str = "Java is fun"; String subStr = str.substring(5);subStr的值为"is fun"。另一种是substring(int beginIndex, int endIndex),它从beginIndex开始(包括)截取到endIndex(不包括)。例如:String str = "Python"; String subStr = str.substring(1, 4);subStr的值为"yth"

  4. 字符串与字符数组的转换

    • 字符串转字符数组:

      • 可以使用toCharArray()方法。例如:String str = "Hello"; char[] charArray = str.toCharArray();,此时charArray数组中就包含了字符串str中的各个字符,即charArray[0] = 'H'charArray[1] = 'e'等。

    • 字符数组转字符串:

      • 可以使用String类的构造函数。例如:char[] charArray = {'J', 'a', 'v', 'a'}; String str = new String(charArray);,这样就创建了一个内容为"Java"的字符串对象。也可以使用valueOf()方法,如String str = String.valueOf(charArray);,效果相同。

  5. 字符串格式化

    • 可以使用System.out.printf()或者String.format()方法来格式化字符串。例如:

      • int num = 10; String str = String.format("The number is %d", num);,这里%d是一个格式化占位符,表示整数,str的值为"The number is 10"。还可以格式化其他类型的数据,如%f表示浮点数,%s表示字符串等。如果有多个参数,如String.format("The number is %d and the string is %s", 20, "Java");,会按照占位符的顺序依次替换。

  6. 字符串常量池

    • 字符串常量池是 Java 堆内存中的一块特殊区域。当使用直接赋值的方式创建字符串时,字符串对象会被放入常量池中。这样做的好处是可以节省内存空间,因为如果有多个相同内容的字符串,它们可以共享同一个对象。例如:

      • String str1 = "Hello"; String str2 = "Hello";,在这种情况下,str1str2实际上引用的是同一个字符串对象,这个对象位于字符串常量池中。这样可以提高性能并且减少内存开销。如果通过new关键字创建字符串,如String str3 = new String("Hello");,会在堆内存中创建一个新的对象,不过如果常量池中不存在"Hello"这个字符串,也会先在常量池中创建一个,然后再在堆中创建新的对象供str3引用。

你可能感兴趣的:(python,开发语言)