What is the difference between String.subString() and String.subSequence()

后端 未结 8 996
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-25 11:34

String.subSequence() has the following javadoc:

Returns a new character sequence that is a subsequence of this sequence.

相关标签:
8条回答
  • 2020-12-25 12:03

    Using str.subSequence(begin, end) returns a CharSequence which is a read-only form of the string represented as a sequence of chars. For example:

    String string = "Hello";
    CharSequence subSequence = string.subSequence(0, 5);
    

    It's read only in the sense that you can't change the chars within the CharSequence without instantiating a new instance of a CharSequence.

    If you have to use str.subSequence(begin, end), you can cast the result to a String:

    String string = "Hello";
    String subSequence = (String) string.subSequence(0, 5);
    

    and use all the normal String operators like subSequence += " World";

    0 讨论(0)
  • 2020-12-25 12:08

    In simple terms of understanding:

    Substring : A substring is a contiguous sequence of characters within a string, where oder matters.

    Substring
    string
    ring
    

    Subsequences: From a string, any of the character but in sequence.

    Substring
    u s i
    s b t i n g
    r g
    
    0 讨论(0)
  • 2020-12-25 12:13

    In short, it doesn't matter much for String objects. They are equivalent, unless you need to pass the result to something which only takes String, in which case you must use the subtring(int,int) version or cast the subsequence(int,int) version to a String (because that's what it is, internally).

    String.substring(int,int) existed first, because String existed first. In Java 1.4, CharSequence was added, and somebody apparently realized that it would be useful to have the same functionality there, but which returned a CharSequence instead of String (for flexibility). So, along came CharSequence.subSequence(int,int). However, since String implements CharSequence, String inherited the seemingly redundant method.

    0 讨论(0)
  • 2020-12-25 12:15

    If you look at the source of String, you will see that subsequence actually calls substring. The only thing it does different than substring is it casts the string to a CharSequence.

    0 讨论(0)
  • 2020-12-25 12:19

    Subsequence

    Subsequence is a generalisation of substring, suffix, and prefix. Finding the longest string which is a subsequence of two or more strings is known as the longest common subsequence problem.

    Example: The string "anna" is a subsequence of the string "banana":

    banana
     || ||
     an na
    

    Substring

    A substring of a string is a prefix of a suffix of the string, and equivalently a suffix of a prefix. If one string is a substring of another, it is also a subsequence, which is a more general concept.

    Example: The string "ana" is a substring (and subsequence) of banana at two different offsets:

    banana
     |||||
     ana||
       |||
       ana
    

    Read more here.

    But as far as Java is concerned, there isn't any difference in their use as stated clearly in the javadoc. Also as it's stated in there, the method subSequence has only been implemented in class String so as to keep it compliant with the CharSequence interface. And this method's name is indeed just a misnomer.

    0 讨论(0)
  • 2020-12-25 12:19

    Substrings are consecutive subsequences.

    For example, for sequence abc we have

    substrings: a, ab, abc, b, bc, c, and the empty substring;
    subsequences: a, b, ab, c, ac, bc, abc, and the empty subsequence.
    

    When the letters are repeated, some substrings and subsequences will look the same.

    0 讨论(0)
提交回复
热议问题