【问题标题】:What uses are there for String#subSequence()String#subSequence() 有什么用
【发布时间】:2019-01-23 01:40:50
【问题描述】:

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

此外,article on subSequence 在结尾处声明:

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

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

【问题讨论】:

  • subSequence 不是String 方法,而是CharSequence 方法。如果您正在处理String,则应始终使用substring

标签: java string substring subsequence


【解决方案1】:

当它适用于程序时,抽象会带来好处。举个例子:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      有很多 API 使用 CharSequences 代替 Strings - 当 CharSequence “足够好”并且 API 的作者认为增加了弹性(例如,通过使用积极优化的可能性可变的实现)夸大了字符串提供的安全优势。

      一个很好的、值得注意的例子是 Android - 几乎所有在小部件上定义的方法(例如,参见 TextView),人们可以合理地期望采用 String - 比如 setText - 改为采用 CharSequence .

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 2015-01-18
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        相关资源
        最近更新 更多