# 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)