Java8 API學習2 - java.lang.CharSequence, java.lang.String


CharSequence

public interface CharSequence 

字符序列接口, 實現此接口的非抽象類有String, StringBuffer, StringBuilder. 從結果來講, 該接口的主要作用就是使得三者之間在進行一部分操作(比如查找, 比較)時變得容易.

概念說明

主要是char value和codepoint value的意義及區別, surrogate code point的含義. 簡單地說char代表一個2字節的字符, codepoint才代表一個完整的字符(因為少數字符是4字節的, 比如emoji), 具體請參考其他人的文章.

CharSequence定義的方法

char charAt(int) int length() CharSequence subSequence(int, int) String toString() //其實重定義toString沒有用, 因為Object類已經實現了這個方法, 就當做這里是一種強調吧 

java8新增2個default方法

public default IntStream chars() public default IntStream codePoints() 

分別轉換為以char和codepoint為單位的java stream.注意轉換后為int類型的unicode編碼.

String

public final class String implements java.io.Serializable, Comparable<String>, CharSequence 

這是一個final class.
其中, Serializable 是空接口; Comparable<String>函數式接口, 其方法為int compareTo(T to).

String的構造函數 - 13個

1.以下幾個容易理解(6個)

String()
String(byte[])
String(char[])
String(String)
String(StringBuilder)
String(StringBuffer)

2.從數組中截取字符(2個)

String(byte bytes[], int offset, int length)
String(char value[], int offset, int count)

3.從非Unicode編碼的字節流中截取字符串, 最后一個參數為編碼類型(4個)

String(byte[], String)
String(byte[], Charset)
String(byte[] bytes, int offset, int length, String charsetName)
String(byte[] bytes, int offset, int length, Charset charset)

4.從int類型的codepoint數組轉化為String

String(int[] codePoints, int offset, int count)

String的靜態方法

1.生成新String, 實際是調用了構造函數String(char[], int, int)

String copyValueOf(char[]) String copyValueOf(char[], int, int) String valueOf(char[]) String valueOf(char[], int, int) 

2.format, 類似於sprintf

String format(String, Object...) String format(Locale, String, Object...) 
  1. join, 可以認為split的逆操作嗎
String join(CharSequence, CharSequence...) //或者是數組CharSequence[] String join(CharSequence, Iterable<? extends CharSequence) 

4.valueOf轉換, 實際是調用了Integer.toString()等方法

String valueOf(char) String valueOf(double) String valueOf(float) String valueOf(int) String valueOf(Object obj) //=>obj.toString() String valueOf(long) 

String的對象方法

(除非特別說明, 否則該方法不支持正則)
1.常用, 略

char charAt(int) 

boolean isEmpty()
boolean equals(Object) //override
boolean equalsIgnoreCase(String)

int indexOf(int ch) //=> indexOf(ch, 0), *用int表示ch可能是因為考慮到了codepoint吧
int indexOf(int ch, int fromIndex)
int indexOf(String str) //=>indexOf(str, 0)
int indexOf(String str, int fromIndex)

int lastIndexOf(int)
int lastIndexOf(int, int)
int lastIndexOf(String)
int lastIndexOf(String, int)

int length()

String concat(String)
String trim()

  1. 不太常用, 但是還算容易理解, 略
boolean startWith(String prefix) //=>startsWith(prefix, 0) boolean startsWith(Stirng prefix, int offset) boolean endsWith(String) //note: no overloads int hashCode() //override Object#hashCode 

3.compareTo, 注意其返回值的含義:
(1) this.charAt(k)-anotherString.charAt(k)
(2) this.length()-anotherString.length()

int CompareTo(String) int CompareToIgnoreCase(String) 

4.*codepoint相關, 這里還是不太明白

//這兩個見CharSequence接口說明
IntStream chars() IntStream codePoints() 

int codePointAt(int index)
int codePointBefore(int)
int codePointCount(int beginIndex, int endIndex)
int offsetByCodePoints(int index, int codePointOffset)

  1. 參數為CharSequence, 表明可以和StringBuffer等類型直接比較
    (還有replace(), 未列出, 見10.)
boolean contains(CharSequence) boolean contentEquals(CharSequence) 

6.get/set/to
(String是常量字符串當然沒有set...)

byte[] getBytes()
byte[] getBytes(String) //設置編碼
byte[] getBytes(Charset)
void getChars(int srcBegin, int srcEnd, char[] dst[], int dstBegin) 

char[] toCharArray()
String toLowerCase()
String toLowerCase(Locale) //設置Locale, 使用其他語言的大小寫轉換規則
String toUpperCase()
String toUpperCase(Locale)

7.intern

native String intern() //*可能是從字符串池中尋找是否有相同的字符串然后修改引用指向該字符串 

8.正則表達式相關, 可以從參數名確定
(還有replaceAll()replaceFirst(), 未列出, 見10.)

boolean matches(String) String[] split(String) String[] split(String regex, int limit) //最多切分limit次 

9.*不太理解...

boolean regionMatches(boolean, int, String, int, int) boolean regionMatches(int, Stirng, int, int) 
  1. replace
String replace(char, char) String replace(CharSequence, CharSequence) String replaceAll(String, String) //支持正則 String replaceFirst(String, String) //支持正則 

11.substring
條件: 0<=beginIndex<=endIndex<=length, 注意和JavaScript或python的類似函數區分

CharSequence subSequence(int, int) //只是返回值不同 String substring(int beginIndex, int endIndex) String substring(int beginIndex) //=>substring(beginIndex, this.length() - beginindex) 
      </div>
    </div>
posted @ 2019-06-12 15:33  星朝  閱讀( 523)  評論( 0編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM