String#subSequence()有什么用?

时间:2018-08-16 06:55:16

标签: java string substring subsequence

所以我读了this answerthis answer关于subSequence()subString()之间的区别,并且我知道两者之间的唯一区别是返回类型。实际上,subSequence()在后​​台调用了subString()

此外,此article on subSequence最后指出:

  

使用subSequence方法没有没有好处,理想情况下,您应该   始终使用String substring方法。

使用subSequence()真的没有好处吗?如果是这样,为什么要引入?如果有好处,那是什么,它的已知用途是什么?

3 个答案:

答案 0 :(得分:4)

当抽象适用于程序时,就有了好处。例如:

public CharSequence getPrefix(CharSequence cs) {
    return cs.subSequence(0, 1);
}

这可以称为任何CharSequence实例(StringStringBuilderStringBuffer等)

CharSequence cs = "John";
getPrefix("Name");

cs = new StringBuilder("James");
getPrefix(cs);

普通应用程序几乎不使用CharSequence接口,但这在某些情况下(尤其是库)是适用的。

写并没有多大意义:

CharSequence sub = stringObject.subSequence(0, 1);

因为通常希望使用String类型的子字符串,但是框架可能更喜欢在其API中使用CharSequence,而不是String

答案 1 :(得分:2)

有很多使用CharSequences而不是Strings的API-当CharSequence足够好并且API的作者认为增加了弹性时,就会发生这种情况使用可变实现进行积极优化的可能性)使Strings提供的安全性优势显得过分。

Android是一个很好的例子,它几乎是在小部件上定义的几乎所有方法(例如,TextView),人们可能会期望采用String-例如setText-改为使用CharSequence

因此,当然,当TextView只需要取一部分文本时,就需要使用subsequence方法。

答案 2 :(得分:1)

  

使用subSequence()真的没有好处吗?

-> I do not see any real benefit of that method. 
  

如果是这样,为什么要引入它?

-> As per Java API note "This method is defined so that the  String class can implement the  CharSequence interface". As `CharSequence` has the abstract method CharSequence subSequence(int start, int end);