ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java - `String`类及其方法 > 原文: [https://beginnersbook.com/2013/12/java-strings/](https://beginnersbook.com/2013/12/java-strings/) **字符串**是一系列字符,例如`"Hello"`是一个包含 5 个字符的字符串。在 java 中,字符串是一个不可变对象,这意味着它是常量,一旦创建就无法更改。在本教程中,我们将详细了解`String`类和`String`方法以及许多其他 Java `String`教程。 ## 创建一个字符串 有两种方法可以在 Java 中创建`String` 1. 字符串字面量 2. 使用`new`关键字 ### 字符串字面量 在 java 中,可以像这样创建字符串:将字符串字面值分配给`String`实例: ```java String str1 = "Welcome"; String str2 = "Welcome"; ``` **这种方法的问题**:正如我在开头所说的那样,`String`是 Java 中的一个对象。但是我们没有使用上面的`new`关键字创建任何字符串对象。编译器为我们执行该任务它创建了一个字符串对象,该字符串对象具有字符串字面值(我们已经提供,在这种情况下它是`"Welcome"`)并将其分配给提供的字符串实例。 **但是**如果对象已经存在于内存中它不会创建新的对象,而是将同一个旧对象分配给新实例,这意味着即使我们上面有两个字符串实例(`str1`和`str2`)编译器仅创建一个(具有值`"Welcome"`)并将其分配给两个实例。例如,有 10 个字符串实例具有相同的值,这意味着在内存中只有一个对象具有该值,并且所有 10 个字符串实例将指向同一个对象。 如果我们想要两个具有相同字符串的不同对象,该怎么办?为此,我们需要使用**`new`关键字**创建字符串。 ### 使用`new`关键字 正如我们在上面看到的那样,当我们尝试将相同的字符串对象分配给两个不同的文字时,编译器只创建了一个对象并使两个文字都指向同一个对象。为了克服这种方法,我们可以创建这样的字符串: ```java String str1 = new String("Welcome"); String str2 = new String("Welcome"); ``` 在这种情况下,编译器将在内存中创建具有相同字符串的两个不同对象。 ## 一个简单的 Java 字符串示例 ```java public class Example{ public static void main(String args[]){ //creating a string by java string literal String str = "Beginnersbook"; char arrch[]={'h','e','l','l','o'}; //converting char array arrch[] to string str2 String str2 = new String(arrch); //creating another java string str3 by using new keyword String str3 = new String("Java String Example"); //Displaying all the three strings System.out.println(str); System.out.println(str2); System.out.println(str3); } } ``` 输出: ```java Beginnersbook hello Java String Example ``` ## Java 字符串方法 以下是 Java `String`类中可用方法的列表。在示例的帮助下,在单独的教程中解释了这些方法。下面提供了教程的链接: 1. [`char charAt(int index)`](https://beginnersbook.com/2013/12/java-string-charat-method-example/ "CharAt"):返回指定索引处的字符。指定的索引值应介于 0 到`length()-1`之间。如果`index < 0 || >=`字符串的长度,它会抛出`IndexOutOfBoundsException`。 2. [`boolean equals(Object obj)`](https://beginnersbook.com/2013/12/java-string-equals-and-equalsignorecase-methods-example/):将字符串与指定的字符串进行比较,如果两者匹配,则返回`true`。 3. [`boolean equalsIgnoreCase(String string)`](https://beginnersbook.com/2013/12/java-string-equals-and-equalsignorecase-methods-example/):它的作用与 equals 方法相同,但在比较字符串时不考虑这种情况。它做了一个不区分大小写的比较。 4. [`int compareTo(String string)`](https://beginnersbook.com/2013/12/java-string-compareto-method-example/):此方法根据字符串中每个字符的 Unicode 值比较两个字符串。 5. [`int compareToIgnoreCase(String string)`](https://beginnersbook.com/2013/12/java-string-comparetoignorecase-method-example/):与`CompareTo`方法相同但是它在比较期间忽略了这种情况。 6. [`boolean startsWith(String prefix, int offset)`](https://beginnersbook.com/2013/12/java-string-startswith-method-example/):它检查子字符串(从指定的偏移索引开始)是否具有指定的前缀。 7. [`boolean startsWith(String prefix)`](https://beginnersbook.com/2013/12/java-string-startswith-method-example/):它测试字符串是否具有指定的前缀,如果是,则返回`true`,否则返回`false`。 8. [`boolean endsWith(String suffix)`](https://beginnersbook.com/2013/12/java-string-endswith-method-example/ "endsWith"):检查字符串是否以指定的后缀结尾。 9. [`int hashCode()`](https://beginnersbook.com/2013/12/java-string-trim-and-hashcode-methods/):返回字符串的哈希码。 10. [`int indexOf(int ch)`](https://beginnersbook.com/2013/12/java-string-indexof-method-example/):返回字符串中第一次出现指定字符`ch`的索引。 11. [`int indexOf(int ch, int fromIndex)`](https://beginnersbook.com/2013/12/java-string-indexof-method-example/):与`indexOf`方法相同,但是它从指定的`fromIndex`开始搜索字符串。 12. [`int lastIndexOf(int ch)`](https://beginnersbook.com/2013/12/java-string-lastindexof-method-example/):返回字符串中字符`ch`的最后一次出现。 13. [`int lastIndexOf(int ch, int fromIndex)`](https://beginnersbook.com/2013/12/java-string-lastindexof-method-example/):与`lastIndexOf(int ch)`方法相同,它从`fromIndex`开始搜索。 14. [`int indexOf(String str)`](https://beginnersbook.com/2013/12/java-string-indexof-method-example/):此方法返回指定子串`str`的第一次出现的索引。 15. [`int lastindexOf(String str)`](https://beginnersbook.com/2013/12/java-string-lastindexof-method-example/):返回字符串`str`的最后一次出现的的索引。 16. [`String substring(int beginIndex)`](https://beginnersbook.com/2013/12/java-string-substring-method-example/):返回字符串的子串。子字符串以指定索引处的字符开头。 17. [`String substring(int beginIndex, int endIndex)`](https://beginnersbook.com/2013/12/java-string-substring-method-example/):返回子字符串。子字符串以`beginIndex`中的字符开头,以`endIndex`中的字符结束。 18. [`String concat(String str)`](https://beginnersbook.com/2013/12/java-string-concat-method-example/ "concat"):在字符串末尾连接指定的字符串`str`。 19. [`String replace(char oldChar, char newChar)`](https://beginnersbook.com/2013/12/java-string-replace-replacefirst-replaceall-method-examples/):在使用`newChar`更改`oldChar`的所有出现后,它返回更新的字符串。 20. [`boolean contains(CharSequence s)`](https://beginnersbook.com/2017/10/java-string-contains-method/):它检查字符串是否包含指定的`char`值序列。如果是,则返回`true`,否则返回`false`。如果`s`为`null`,它抛出 NullPointerException`。 21. [`String toUpperCase(Locale locale)`](https://beginnersbook.com/2013/12/java-string-tolowercase-method-example/):使用指定语言环境定义的规则将字符串转换为大写字符串。 22. [`String toUpperCase()`](https://beginnersbook.com/2013/12/java-string-tolowercase-method-example/):相当于`toUpperCase(Locale.getDefault())`。 23. [`public String intern()`](https://beginnersbook.com/2017/10/java-string-intern-method/):此方法搜索内存池中的指定字符串,如果找到它,则返回它的引用,否则它将内存空间分配给指定的字符串,并将引用分配给它。 24. [`public boolean isEmpty()`](https://beginnersbook.com/2017/10/java-string-isempty-method-with-example/):如果给定的字符串长度为 0,则此方法返回`true`。如果指定的 Java 字符串的长度不为零,则返回`false`。 25. [`public static String join()`](https://beginnersbook.com/2017/10/java-string-join-method/):此方法使用指定的分隔符连接给定的字符串并返回连接的 Java 字符串 26. [`String replaceFirst(String regex, String replacement)`](https://beginnersbook.com/2013/12/java-string-replace-replacefirst-replaceall-method-examples/):它用指定的替换字符串替换第一次出现的,符合给定正则表达式`regex`的子字符串。 27. [`String replaceAll(String regex, String replacement)`](https://beginnersbook.com/2013/12/java-string-replace-replacefirst-replaceall-method-examples/):它用`replacement`字符串替换所有适合[正则表达式](https://beginnersbook.com/2014/08/java-regex-tutorial/)`regex`的子串。 28. [`String[] split(String regex, int limit)`](https://beginnersbook.com/2013/12/java-string-split-method-example/):它拆分字符串并返回与给定正则表达式匹配的子字符串数组。 limit 是这里的结果阈值。 29. [`String[] split(String regex)`](https://beginnersbook.com/2013/12/java-string-split-method-example/):与 `split(String regex, int limit)`方法相同,但它没有任何阈值限制。 30. [`String toLowerCase(Locale locale)`](https://beginnersbook.com/2013/12/java-string-tolowercase-method-example/):它使用给定语言环境定义的规则将字符串转换为小写字符串。 31. [`public static String format()`](https://beginnersbook.com/2017/10/java-string-format-method/):此方法返回格式化的 java 字符串 32. [`String toLowerCase()`](https://beginnersbook.com/2013/12/java-string-tolowercase-method-example/):相当于`toLowerCase(Locale。getDefault())`。 33. [`String trim()`](https://beginnersbook.com/2013/12/java-string-trim-and-hashcode-methods/):从原始字符串中省略前导和尾随空格后返回子字符串。 34. [`char[] toCharArray()`](https://beginnersbook.com/2013/12/java-string-tochararray-method-example/):将字符串转换为字符数组。 35. [`static String copyValueOf(char[] data)`](https://beginnersbook.com/2013/12/java-string-copyvalueof-method-example/):返回包含指定字符数组字符的字符串。 36. [`static String copyValueOf(char[] data, int offset, int count)`](https://beginnersbook.com/2013/12/java-string-copyvalueof-method-example/):与上面的方法相同,带有两个额外的参数 - 子数组的初始偏移量和子数组的长度。 37. [`void getChars(int srcBegin, int srcEnd, char [] dest, int destBegin)`](https://beginnersbook.com/2013/12/java-string-getchars-method-example/):它将`src`数组的字符复制到`dest`数组。只有指定的范围被复制(`srcBegin`到`srcEnd`)到`dest`子数组(从`fromBegin`开始)。 38. [`static String valueOf()`](https://beginnersbook.com/2017/10/java-string-valueof-method/):此方法返回传递参数的字符串表示形式,如`int`,`long`,`float`,`double`,`char`和`char`数组。 39. [`boolean contentEquals(StringBuffer sb)`](https://beginnersbook.com/2013/12/java-string-contentequals-method-example/ "contentEquals"):它将字符串与指定的字符串缓冲区进行比较。 40. [`boolean regionMatches(int srcoffset, String dest, int destoffset, int len)`](https://beginnersbook.com/2013/12/java-string-regionmatches-method-example/):它将输入的子字符串与指定字符串的子字符串进行比较。 41. [`boolean regionMatches(boolean ignoreCase, int srcoffset, String dest, int destoffset, int len)`](https://beginnersbook.com/2013/12/java-string-regionmatches-method-example/):regionMatches 方法的另一种变体,带有额外的布尔参数,用于指定比较是区分大小写还是不区分大小写。 42. [`byte[] getBytes(String charsetName)`](https://beginnersbook.com/2013/12/java-string-getbytes-method-example/):使用指定的`charset`编码将字符串转换为字节序列,并返回结果字节数组。 43. [`byte[] getBytes()`](https://beginnersbook.com/2013/12/java-string-getbytes-method-example/):此方法类似于上面的方法,它只使用默认的字符集编码将字符串转换为字节序列。 44. [`int length()`](https://beginnersbook.com/2013/12/java-string-length-method-example/):返回字符串的长度。 45. [`boolean matches(String regex)`](https://beginnersbook.com/2013/12/java-string-matches-method-example/):它检查字符串是否与指定的[正则表达式](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#sum)匹配。 46. `int codePointAt(int index)`:它类似于 charAt 方法,但它返回指定索引的 Unicode 代码点值而不是字符本身。 ## 流行的 Java 字符串教程 我在 java 中分享了几个关于`String`的教程。以下是流行的 Java `String`教程的链接。 1. [`String`到`int`的转换](https://beginnersbook.com/2013/12/how-to-convert-string-to-int-in-java/) 2. [`int`到`String`的转换](https://beginnersbook.com/2015/05/java-int-to-string/) 3. [`String`到`Double`的转换](https://beginnersbook.com/2013/12/how-to-convert-string-to-double-in-java/) 4. [`Double`到`String`的转换](https://beginnersbook.com/2015/05/java-double-to-string/) 5. [`String`到`long`的转换](https://beginnersbook.com/2013/12/how-to-convert-string-to-long-in-java/) 6. [`long`到`String`的转换](https://beginnersbook.com/2015/05/java-long-to-string/) 7. [`InputStream`到`String`的转换](https://beginnersbook.com/2013/12/how-to-convert-inputstream-to-string-in-java/) 8. [`String` vs `StringBuffer`](https://beginnersbook.com/2014/08/string-vs-stringbuffer/) 9. [`String`到`boolean`的转换](https://beginnersbook.com/2014/07/convert-string-to-boolean-primitive-in-java/) 10. [`boolean`到`String`的转换](https://beginnersbook.com/2015/05/java-boolean-to-string/) 11. [`String`到`Boolean`的转换](https://beginnersbook.com/2014/07/convert-string-object-to-boolean-object-in-java/) 12. [删除字符串的尾随空格](https://beginnersbook.com/2014/07/how-to-remove-only-trailing-spaces-of-a-string-in-java/) 13. [使用零/空格左填充字符串](https://beginnersbook.com/2014/07/java-left-padding-a-string-with-spaces-and-zeros/) 14. [使用零/空格右填充字符串](https://beginnersbook.com/2014/07/java-right-padding-a-string-with-spaces-and-zeros/) 15. [在字符串中查找重复字符的程序](https://beginnersbook.com/2014/07/java-program-to-find-duplicate-characters-in-a-string/) 16. [`char`到`String`的转换,以及相反](https://beginnersbook.com/2014/06/how-to-convert-char-to-string-and-a-string-to-char-in-java/) 17. [`char`数组到`String`的转换](https://beginnersbook.com/2014/06/how-to-convert-a-char-array-to-a-string-in-java/) 18. [`String`到`Date`的转换](https://beginnersbook.com/2013/04/java-string-to-date-conversion/) 19. [`Date`到`String`的转换](https://beginnersbook.com/2013/05/java-date-string-conversion/) 20. [ASCII 到`String`的转换](https://beginnersbook.com/2015/05/java-ascii-to-string-conversion/) 21. [`float`到`String`的转换](https://beginnersbook.com/2015/05/java-float-to-string/) 22. [`StackTrace`到`String`的转换](https://beginnersbook.com/2015/05/java-stacktrace-to-string-conversion/) 23. [`Writer`到`String`的转换](https://beginnersbook.com/2015/05/java-writer-to-string-conversion/) 24. [`String`到`ArrayList`的转换](https://beginnersbook.com/2015/05/java-string-to-arraylist-conversion/) 25. [Java 8 - `StringJoiner`示例](https://beginnersbook.com/2017/10/java-8-stringjoiner/) 26. [反转`String`的单词的 Java 程序](https://beginnersbook.com/2017/09/java-program-to-reverse-words-in-a-string/) 27. [使用递归反转`String`的 Java 程序](https://beginnersbook.com/2017/09/java-program-to-reverse-a-string-using-recursion/) #### 参考文献: * [`String` Javadoc](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html) * [Java 8 - `String` JavaDoc](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html)