原文: https://beginnersbook.com/2013/12/java-string-split-method-example/

Java Stringsplit方法用于根据给定的分隔符或正则表达式String拆分为其子串。

例如:

  1. String: [email protected]
  2. Regular Expression: @
  3. Output : {"chaitanya", "singh"}

Java 字符串拆分方法

我们在String类中有两种split()方法。

  1. String[] split(String regex):在根据分隔正则表达式拆分输入String后返回一个字符串数组。

  2. String[] split(String regex, int limit):当我们想要限制子串时,使用这个String split方法。此方法与上述方法的唯一区别在于它限制了拆分后返回的字符串数。对于例如split("anydelimiter", 3)将返回仅 3 个字符串的数组,即使字符串中的分隔符超过 3 次也是如此。

如果限制为负,则返回的数组将具有尽可能多的子串,但是当限制为零时,返回的数组将具有除尾随空字符串之外的所有子串。

如果指定正则表达式的语法无效,则抛出 PatternSyntaxException

Java String拆分示例

  1. public class SplitExample{
  2. public static void main(String args[]){
  3. // This is out input String
  4. String str = new String("28/12/2013");
  5. System.out.println("split(String regex):");
  6. /* Here we are using first variation of java string split method
  7. * which splits the string into substring based on the regular
  8. * expression, there is no limit on the substrings
  9. */
  10. String array1[]= str.split("/");
  11. for (String temp: array1){
  12. System.out.println(temp);
  13. }
  14. /* Using second variation of split method here. Since the limit is passed
  15. * as 2\. This method would only produce two substrings.
  16. */
  17. System.out.println("split(String regex, int limit) with limit=2:");
  18. String array2[]= str.split("/", 2);
  19. for (String temp: array2){
  20. System.out.println(temp);
  21. }
  22. System.out.println("split(String regex, int limit) with limit=0:");
  23. String array3[]= str.split("/", 0);
  24. for (String temp: array3){
  25. System.out.println(temp);
  26. }
  27. /* When we pass limit as negative. The split method works same as the first variation
  28. * because negative limit says that the method returns substrings with no limit.
  29. */
  30. System.out.println("split(String regex, int limit) with limit=-5:");
  31. String array4[]= str.split("/", -5);
  32. for (String temp: array4){
  33. System.out.println(temp);
  34. }
  35. }
  36. }

输出:

  1. split(String regex):
  2. 28
  3. 12
  4. 2013
  5. split(String regex, int limit) with limit=2:
  6. 28
  7. 12/2013
  8. split(String regex, int limit) with limit=0:
  9. 28
  10. 12
  11. 2013
  12. split(String regex, int limit) with limit=-5:
  13. 28
  14. 12
  15. 2013

java 字符串拆分方法中零和负限制之间的差异

在上面的示例中,split("/", 0)split("/", -5)返回相同的值,但在某些情况下,结果会有所不同。让我们通过一个例子来看看这两者之间的区别:

  1. String s="bbaaccaa";
  2. String arr1[]= s.split("a", -1);
  3. String arr2[]= s.split("a", 0);

在这种情况下,arr1将具有{"bb","","cc","",""}但是arr2将具有{"bb","","cc"},因为限制零不包括试验空字符串。

让我们看看完整的程序。

  1. public class JavaExample{
  2. public static void main(String args[]){
  3. // This is out input String
  4. String s = new String("bbaaccaa");
  5. //Splitting with limit as 0
  6. String arr2[]= s.split("a", 0);
  7. System.out.println("Zero Limit split:");
  8. for (String str2: arr2){
  9. System.out.println(str2);
  10. }
  11. //Splitting with negative limit
  12. String arr1[]= s.split("a", -1);
  13. System.out.println("Negative Limit split:");
  14. for (String str: arr1){
  15. System.out.println(str);
  16. }
  17. System.out.println("End of program");
  18. }
  19. }

输出:

Java `String split()`方法 - 图1

Java 带有多个分隔符(特殊字符)的字符串拆分

让我们看看我们如何在使用split()方法时传递多个分隔符。在这个例子中,我们基于多个特殊字符拆分输入字符串。

  1. public class JavaExample{
  2. public static void main(String args[]){
  3. String s = " ,ab;gh,bc;pq#kk$bb";
  4. String[] str = s.split("[,;#$]");
  5. //Total how many substrings? The array length
  6. System.out.println("Number of substrings: "+str.length);
  7. for (int i=0; i < str.length; i++) {
  8. System.out.println("Str["+i+"]:"+str[i]);
  9. }
  10. }
  11. }

输出:

Java `String split()`方法 - 图2

让我们再练习几个例子:

示例:Java String split方法中的正则表达式

  1. public class SplitExample1 {
  2. public static void main(String args[])
  3. {
  4. String str = "helloxyzhixyzbye";
  5. String[] arr = str.split("xyz");
  6. for (String s : arr)
  7. System.out.println(s);
  8. }
  9. }

输出:

  1. hello
  2. hi
  3. bye

示例:基于空格分割字符串

  1. public class SplitExample2 {
  2. public static void main(String args[])
  3. {
  4. String str = "My name is Chaitanya";
  5. //regular expression is a whitespace here
  6. String[] arr = str.split(" ");
  7. for (String s : arr)
  8. System.out.println(s);
  9. }
  10. }

输出:

  1. My
  2. name
  3. is
  4. Chaitanya