String#subSequence()有哪些用途?

3
所以我读了关于subSequence()subString()区别的这个答案这个答案,我知道两者唯一的区别是返回类型。实际上,在幕后subSequence()调用subString()
此外,这篇有关subSequence的文章在最后指出:

subSequence方法没有任何好处,你应该始终使用String substring方法。

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

subSequence不是一个String方法,它是一个CharSequence方法。如果你正在处理String,你应该总是使用substring - zhh
3个回答

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


3

有许多API在使用CharSequences而不是Strings - 当CharSequence足够好且API的作者认为添加弹性(例如通过使用可变实现进行积极优化的可能性)超过了Strings提供的安全性的好处时,就会发生这种情况。

一个很好的例子是Android - 几乎所有在小部件上定义的方法(例如 TextView )都应该采用String - 例如setText - 而是采用CharSequence

所以,当TextView只需要使用文本的一部分时,它将需要使用subsequence方法。


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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接