# Java - String Class 及其方法用示例解释

> 原文： [https://beginnersbook.com/2013/12/java-strings/](https://beginnersbook.com/2013/12/java-strings/)

**字符串**是一系列字符，例如“Hello”是一个包含 5 个字符的字符串。在 java 中，string 是一个不可变对象，这意味着它是常量，一旦创建就无法更改。在本教程中，我们将详细了解 String 类和 String 方法以及许多其他 Java String 教程。

## 创建一个字符串

有两种方法可以在 Java 中创建 String

1.  字符串字面量
2.  使用新关键字

### 字符串字面量

在 java 中，可以像这样创建字符串：将字符串文字分配给 String 实例：

```java
String str1 = "Welcome";
String str2 = "Welcome";
```

**这种方法的问题**：正如我在开头所说的那样，String 是 Java 中的一个对象。但是我们没有使用上面的 new 关键字创建任何字符串对象。编译器为我们执行该任务它创建了一个字符串对象，该字符串对象具有字符串文字（我们已经提供，在这种情况下它是“欢迎”）并将其分配给提供的字符串实例。

**但是**如果对象已经存在于内存中它不会创建新的 Object 而是将同一个旧对象分配给新实例，这意味着即使我们上面有两个字符串实例（str1 和 str2）编译器仅在字符串对象上创建（具有值“欢迎”）并将其分配给两个实例。例如，有 10 个字符串实例具有相同的值，这意味着在内存中只有一个对象具有该值，并且所有 10 个字符串实例将指向同一个对象。

如果我们想要两个具有相同字符串的不同对象，该怎么办？为此，我们需要使用**新关键字**创建字符串。

### 使用新关键字

正如我们在上面看到的那样，当我们尝试将相同的字符串对象分配给两个不同的文字时，编译器只创建了一个对象并使两个文字都指向同一个对象。为了克服这种方法，我们可以创建这样的字符串：

```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＆lt; 0 ||＆gt; = String 的长度，它会抛出 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/ "CompareTo")：此方法根据字符串中每个字符的 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.  [字符串替换（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'的 NullPointerException 为 null。
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 String 的长度不为零，则返回 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/)：它用替换字符串替换所有适合[正则表达式 regex](https://beginnersbook.com/2014/08/java-regex-tutorial/ "Java Regular Expressions (java regex) Tutorial with examples") 的子串。
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 String
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 编码将 String 转换为字节序列，并返回结果字节数组。
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/)：返回 String 的长度。
45.  [boolean matches（String regex）](https://beginnersbook.com/2013/12/java-string-matches-method-example/)：它检查 String 是否与指定的[正则表达式](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.  [在 Java 中将 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.  [在 Java 中将字符串转换为 Double](https://beginnersbook.com/2013/12/how-to-convert-string-to-double-in-java/)
4.  [Double to String 转换](https://beginnersbook.com/2015/05/java-double-to-string/)
5.  [将字符串转换为长](https://beginnersbook.com/2013/12/how-to-convert-string-to-long-in-java/)
6.  [长到字符串转换](https://beginnersbook.com/2015/05/java-long-to-string/)
7.  [InputStream 到字符串转换 - 示例](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.  [将字符串转换为布尔基元](https://beginnersbook.com/2014/07/convert-string-to-boolean-primitive-in-java/)
10.  [boolean to String conversion](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.  [字符串到日期转换](https://beginnersbook.com/2013/04/java-string-to-date-conversion/)
19.  [日期到字符串转换](https://beginnersbook.com/2013/05/java-date-string-conversion/)
20.  [ASCII 到字符串转换](https://beginnersbook.com/2015/05/java-ascii-to-string-conversion/)
21.  [float to 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 to String conversion](https://beginnersbook.com/2015/05/java-writer-to-string-conversion/)
24.  [将字符串转换为 ArrayList](https://beginnersbook.com/2015/05/java-string-to-arraylist-conversion/)
25.  [Java 8 - StringJoiner 示例](https://beginnersbook.com/2017/10/java-8-stringjoiner/)
26.  [程序在 Java 中反转字符串的字](https://beginnersbook.com/2017/09/java-program-to-reverse-words-in-a-string/)
27.  [使用递归](https://beginnersbook.com/2017/09/java-program-to-reverse-a-string-using-recursion/)在 Java 中反转 String 的程序

#### 参考文献：

*   [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)