2013-03-19 42 views
13

String.subSequence()具有以下的javadoc的區別:是什麼String.subString()和String.subSequence()

返回一個新的字符序列,它是此 序列的子序列。

形式的這種方法的完全相同的方式

str.substring(begin, end) 

此方法被限定爲使得String類可以實現 CharSequence的接口調用

str.subSequence(begin, end) 

的行爲的調用。

任何人都可以解釋一下嗎?

回答

16

使用str.subSequence(begin, end)返回CharSequence這是一個字符串的只讀形式表示爲一個字符序列。 例如:

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

它只有在你不能改變CharSequencechars沒有實例化CharSequence的新實例意識讀取。

如果你必須使用str.subSequence(begin, end),你可以把結果給String

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

,並使用一切正常String運營商如subSequence += " World";

+0

這與.subString()相同。有什麼不同? – code511788465541441 2013-03-20 10:24:31

+4

它們是相同的。它只是一個返回'CharSequence',另一個返回'String'。保存必須在它們之間投射。正如它在[javadoc](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#subSequence(int,int))中所說的那樣,它的定義使得String類可以實現(並使用)CharSequence接口。 – Sam 2013-03-20 12:00:39

+6

@sam上面的評論應該是答案。這將節省我的時間去解決這個問題。 – 2016-12-01 07:57:50

17

子序列

子序列是子串,後綴,和前綴的概括。找到兩個或更多個字符串的子序列中最長的字符串被稱爲最長的公共子序列問題。

實施例:字符串「安娜」是字符串「香蕉」的子序列:

banana 
|| || 
an na 

子串

一個字符串的子字符串是字符串的後綴的前綴,並且相當於前綴的後綴。如果一個字符串是另一個字符串的子字符串,它也是一個子序列,這是一個更一般的概念。

實施例:字符串 「ANA」 是在兩個不同的偏移量香蕉的子串(和序列):

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

更多here

但是就Java而言,在javadoc中清楚地表明它們的使用沒有任何區別。同樣如其中所述,方法subSequence僅在類String中實施,以便保持其與CharSequence接口兼容。 而這個方法的名字確實只是一個誤稱。

+1

這是我正在尋找的答案。 – Shanky 2017-09-10 13:08:29

-1

基本上它是返回什麼。一個是String而另一個是CharSequence(你可以把它當作一個字符串)。
當您需要CharSequence類型的變量時,您將使用subSequence。

1

如果你看看String的來源,你會看到子序列實際上調用了substring。它唯一不同於子字符串的是將字符串轉換爲CharSequence。

0

簡而言之,String對象並不重要。它們是等價的,除非您需要將結果傳遞給String,在這種情況下,您必須使用subtring(int,int)版本或將subsequence(int,int)版本轉換爲String(因爲內部就是這樣)。

String.substring(int,int)先存在,因爲String先存在。在Java 1.4中,添加了CharSequence,有人明顯意識到在那裏具有相同的功能會很有用,但返回CharSequence而不是String(爲了靈活性)。所以,一起來了CharSequence.subSequence(int,int)。但是,由於String實現了CharSequenceString繼承了看似冗餘的方法。