Java - String subsequence() 方法



Java String subSequence() 方法用于检索给定序列的子序列的新字符序列。

此方法的行为类似于 substring() 方法。唯一的区别在于它返回 CharSequence 而不是 String。在内部,subSequence() 方法调用 substring() 方法。返回的 CharSequence 可以显式转换为 String 对象。

子序列从提供的索引处开始,字符值为 start,并以索引 (end-1) 处的字符值为结束。返回的序列的长度(以字符为单位)为 end-start;如果 start 等于 end,则返回空序列。

语法

以下是Java String subSequence()方法的语法:

public CharSequence subSequence(int beginIndex, int endIndex)

参数

  • beginIndex - 这是起始索引的值,包含在内。

  • endIndex - 这是结束索引的值,不包含在内。

返回值

此方法返回指定的子序列。

使用给定索引从字符串中获取子序列示例

以下示例演示了 Java String subSequence() 方法的用法。在这里,我们创建了一个值为“tutorialspoint”的字符串,并尝试检索索引范围“2-9”处的子字符串:

package com.tutorialspoint;

public class StringDemo {       
   public static void main(String[] args) {
      String str = "Tutorials Point!";   
      System.out.println("string = " + str);   
      
      // returns the specified subsequence from index 2 to 9
      System.out.println("string subsequence = " + str.subSequence(2,9));
   }
}

输出

如果编译并运行上述程序,它将产生以下结果:

string = Tutorials Point!
string subsequence = torials

使用负索引从字符串中获取子序列示例

以下是 subSequence() 方法的一个示例,其中传递的索引为负数。由于此方法不接受负值,因此将抛出异常:

public class StringDemo {
   public static void main(String args[]) {
      String s = "Python Programming Language";
      System.out.print("The returned string is: ");
      System.out.println(s.subSequence(-4, 2));
   }
}

异常

如果编译并运行上述程序,则输出将显示如下:

The returned string is: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [-4, 2) out of bounds for length 27
      at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
      at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
      at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
      at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
      at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
      at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
      at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
      at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4589)
      at java.base/java.lang.String.substring(String.java:2703)
      at java.base/java.lang.String.subSequence(String.java:2741)
      at StringDemo.main(StringDemo.java:8)

使用超出范围的索引从字符串中获取子序列示例

在以下示例中,提供的索引超出范围或大于给定字符串的长度。这会导致异常:

public class StringDemo {
   public static void main(String args[]) {
      String s = "Python Programming Language";
      System.out.print("The returned string is: ");
      System.out.println(s.subSequence(15, 60));
   }
}

异常

执行上述程序后,获得的输出如下:

The returned string is: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [15, 60) out of bounds for length 27
      at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
      at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
      at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
      at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
      at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
      at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
      at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
      at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4589)
      at java.base/java.lang.String.substring(String.java:2703)
      at java.base/java.lang.String.subSequence(String.java:2741)
      at StringDemo.main(StringDemo.java:7)

从包含元字符的字符串中获取子序列示例

在以下示例中,我们正在创建一个包含元字符的字符串。然后,我们尝试检索范围“5-15”内的子字符串:

package com.tutorialspoint;

public class StringDemo {
   public static void main(String args[]) {
      String s = "$&!@$%&**&%$#@!#$(*%$#";
      System.out.print("The returned string is: ");
      System.out.println(s.subSequence(5, 15));
   }
}

输出

上述程序的输出如下:

The returned string is: %&**&%$#@!
java_lang_string.htm
广告