# Java `String.split()`方法示例

> 原文： [https://howtodoinjava.com/java/string/java-string-split-example/](https://howtodoinjava.com/java/string/java-string-split-example/)

Java `String.split()`在将字符串拆分为方法参数正则表达式的匹配项之后，返回字符串数组。

## 1\. `String.split()`方法

通过使用*分隔符*子字符串或正则表达式进行分割，可以使用`String.split()`将字符串拆分为**字符串数组**。

#### 1.1 方法语法

`String.split()`方法已重载，有两种变体。

```java
/**
* @param regex - the delimiting regular expression
* @param limit - the result threshold
* 
* @return - the array of strings
*/
public String[] split(String regex);

public String[] split(String regex, int limit);

```

#### 1.2 抛出`PatternSyntaxException`

请注意，如果正则表达式的语法无效，则`split()`会引发`PatternSyntaxException`。 在给定的示例中，`"["`是无效的正则表达式。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {       
        String[] strArray = "hello world".split("[");
    }
}

```

程序输出。

```java
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0
[
^
	at java.util.regex.Pattern.error(Pattern.java:1955)
	at java.util.regex.Pattern.clazz(Pattern.java:2548)
	at java.util.regex.Pattern.sequence(Pattern.java:2063)
	at java.util.regex.Pattern.expr(Pattern.java:1996)
	at java.util.regex.Pattern.compile(Pattern.java:1696)
	at java.util.regex.Pattern.<init>(Pattern.java:1351)
	at java.util.regex.Pattern.compile(Pattern.java:1028)
	at java.lang.String.split(String.java:2367)
	at java.lang.String.split(String.java:2409)
	at com.StringExample.main(StringExample.java:9)

```

#### 1.3 `null`不是有效的方法参数

方法不接受`null`参数。 如果方法参数为`null`，它将抛出`NullPointerException`。

```java
Exception in thread "main" java.lang.NullPointerException
	at java.lang.String.split(String.java:2324)
	at com.StringExample.main(StringExample.java:11)

```

## 2\. Java `String.split(String regex)`示例

#### 2.1 Java 用字或分隔符分割字符串

Java 程序根据某些标记拆分字符串。 在给定的示例中，我为分隔符连字符`"-"`拆分字符串。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {
        String str = "how to do-in-java-provides-java-tutorials";

        String[] strArray = str.split("-");

        System.out.println(Arrays.toString(strArray));
    }
}

```

程序输出：

```java
[how to do, in, java, provides, java, tutorials]

```

与之相似：

#### 2.2 Java 按空格分割字符串

 Java 程序按空格分割字符串。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {
        String str = "how to do in java provides java tutorials";

        String[] strArray = str.split("\\s");

        System.out.println(Arrays.toString(strArray));
    }
}

```

程序输出：

```java
[how, to, do, in, java, provides, java, tutorials]

```

#### 2.2 Java 用多个分隔符分割字符串

Java 程序**用多个分隔符**分割字符串。 在多个分隔符之间使用**正则表达式或运算符**（`'|'`）符号。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {
        String str = "how-to-do-in-java. provides-java-tutorials.";

        String[] strArray = str.split("-|\\.");

        System.out.println(Arrays.toString(strArray));
    }
}

```

程序输出：

```java
[how, to, do, in, java, provides, java, tutorials]

```

## 3\. Java `String.split(String regex, int limit)`示例

此版本的方法也拆分字符串，但是标记的最大数量不能超过`limit`参数。

Java 程序**以空格**分割字符串，例如**最大标记数**不能超过`'5'`。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {
        String str = "how to do in java provides java tutorials";

        String[] strArray = str.split("\\s", 5);

        System.out.println(strArray.length);	//5
        System.out.println(Arrays.toString(strArray));
    }
}

```

程序输出：

```java
5

[how, to, do, in, java provides java tutorials]

```

在此示例中，我们学习了**在 Java** 中将字符串拆分为数组。 我们看到了示例如何使用分隔符在 Java 中拆分字符串。

参考文献：

[Java 字符串指南](https://howtodoinjava.com/java-string/)

[`String` Java 文档](https://docs.oracle.com/javase/9/docs/api/java/lang/String.html)