Java String 字符串
2019獨角獸企業重金招聘Python工程師標準>>>
轉載自:http://my.oschina.net/brucelee80/blog
String
? ? String是引用類型而非基本數據類型,代表不可變的字符序列。
? ? String對象的創建,比如:
? ? String str1 = new String(“Java”); // 其他構造方法請參考API
? ? 其中的”Java”是字面量(直接量),上面的語句實際創建了兩個String對象,一個是”Java”對象,存儲在常量池中,一個是new時在堆中分配的內存。這顯然有點浪費,由于字符串是比較常用的對象,所以Java提供了一種簡潔有效的特殊語法:
? ? String str2 = “Java SE7”;
? ? 例子:直接量”Java”分配在常量池,且會被復用。
??????????????String?s1?=?"Java";String?s2?=?"Java";System.out.println(s1?==?s2);//?trueString?s3?=?new?String("Java");String?s4?=?new?String("Java");System.out.println(s3?==?s4);//?false.System.out.println(s3.equals(s4));//?true.重寫了object的方法。?
String常用方法
方法 | 舉例 |
int length() ? 返回字符串的長度 | "Java".length(); // 4 |
boolean isEmpty() ? 當且僅當length()為0時,返回true | "Java".isEmpty(); // false "".isEmpty(); // true |
char charAt(int index) ? 返回字符串中索引index(從0開始)的字符。 | "Java".charAt(0); // J "Java".charAt(4); // 報錯,StringIndexOutOfBoundsException,因為最大索引是3 |
int indexOf(String str) int indexOf(String str, int fromIndex) int indexOf(int ch) int indexOf(int ch, int fromIndex) ? 返回指定字符或字符串的首次出現的索引位置(fromIndex表示從此索引開始的子字符串,否則從0開始,也就是整個字符串),如果沒找到返回-1 | "Java".indexOf("a"); // 1 "Java".indexOf("a", 2); // 3 "Java".indexOf('a'); // 1 "Java".indexOf('a', 2); // 3 "Java".indexOf('b', 2); // -1 |
int lastIndexOf(String str) int lastIndexOf(String str, int fromIndex) int lastIndexOf(int ch) int lastIndexOf(int ch, int fromIndex) ? 與indexOf類似,不同的是反向查找,也就是最后一次而不是首次出現。 | "Java".lastIndexOf('a'); // 3 |
boolean equals(Object obj) boolean equalsIgnoreCase(String anotherString) ? 返回兩個字符串(對象)是否相等,前者區分大小寫,后者不區分大小寫。 | "Java".equals("Java"); // true "Java".equalsIgnoreCase("JAVA"); // true |
boolean matches(String regex) ? 返回字符串是否匹配給定的正則表達式 | "Java".matches("^[J][a-zA-Z]*[a]$"); // true |
boolean contains(CharSequence s) ? 返回字符串是否包含指定字符序列 | "Java".contains("Ja"); // true |
boolean startsWith(String prefix) boolean startsWith(String prefix, int toffset) boolean endsWith(String suffix) ? 返回字符串是否以指定字符串結束或開始(int toffset表示從此索引開始的子字符串,否則從0開始,也就是整個字符串) | "Java".startsWith("J");// true "Java".startsWith("a", 1);// true "Java".endsWith("a");// true |
String toUpperCase() String toLowerCase() ? 返回字符串大寫(小寫)的形式 | "Java".toUpperCase();// JAVA "Java".toLowerCase();// java |
String substring(int beginIndex) String substring(int beginIndex, int endIndex) ? 返回字符串的子串,索引從beginIndex開始,endIndex結束(無endIndex參數,表示到字符串末尾結束) | "Java".substring(2); // va "Java".substring(0, 2);// Ja // 包括0,但不包括2 |
String trim() ? 返回去掉字符串首位空格后的字符串 | "?? J? ava?? ? ".trim();// J? ava |
返回字符串被替換后的字符串 String replace(char oldChar, char newChar) ? 替換字符oldChar為newChar String replace(CharSequence target, CharSequence ? replacement) ? 替換字符串target為replacement String replaceAll(String regex, String replacement) ? 替換所有匹配正則表達式regex的字符串為replacement String replaceFirst(String regex, String replacement) ? 只替換第一次出現的匹配正則表達式regex的字符串為replacement | "Java".replace('a', 'A'); // JAvA "Java".replace("Ja", "JA");// JAva "Java".replaceAll("[a]", "A");// JAvA "Java".replaceFirst("[a]", "A");// JAva |
String valueOf(int i) String valueOf(long l) ? 返回參數的字符串形式 | String.valueOf(123); // "123" |
String[] split(String regex) ? 返回字符串按指定分隔符分割之后的字符串數組 | "Java".split("[a]");// {"J","v"} |
char[] toCharArray() String valueOf(char[] data) ? 字符串和字符數組進行轉換,字符串其實就是字符序列 | char[] c = "Java".toCharArray(); // {'J','a','v','a'} String.valueOf(c); // Java |
String concat(String str) ? 返回兩個字符串連接之后的字符串 | "Java".concat(" SE7"); // Java SE7 |
int compareTo(String anotherString) int compareToIgnoreCase(String str) ? 返回兩個字符串比較的結果,小于返回-1,大于返回1,等于返回0。比較方法按字典順序(Unicode值)比較 | "abc".compareTo("abd");// 1 "abc".compareToIgnoreCase("ABC");// 0 |
byte[] getBytes() byte[] getBytes(Charset charset) ? 返回按照指定編碼格式的byte序列,不指定編碼格式表示平臺默認的字符集(字符串是字符序列,字符是由二進制數進行編碼得到) | System.out.println("Java".getBytes()[1]); // 97 |
?
StringBuilder和StringBuffer
? ? 由于String類是不可變類,任何對String的改變都會引發新的String對象的生成,會生成多余的對象,比如”A”+”B”,實際生成了3個對象,A、B和AB,而我們希望的是不要生成對象AB,而是直接將A對象的內容拼接成AB,為了解決這些效率問題,Java使用了StringBuffer類和StringBuilder類來表示可變的字符序列,對這兩個類進行內容的改變,不會產生中間的臨時對象。
? ? StringBuilder和StringBuffer的區別是:StringBuilder是線程非安全的。而StringBuffer是線程安全的,故此,也降低了它的處理性能。 如果不存在線程安全問題,建議使用StringBuilder,因為StringBuffer因需要保證線程安全而會有性能損耗。
? ? 使用的比較多的是它們的append方法,往后追加字符串;
? ? inset方法,往指定位置插入字符串;
? ? toString()方法,將它們轉換成String類。
??????????????StringBuffer?sb?=?new?StringBuffer("Java");sb.append("SE");?//?JavaSEsb.append("7");?//?JavaSE7sb.insert(4,?"?");?//?Java?SE7String?s?=???sb.toString();?//?Java?SE7? ?
轉載自:http://my.oschina.net/brucelee80/blog
轉載于:https://my.oschina.net/brucelee80/blog/284256
總結
以上是生活随笔為你收集整理的Java String 字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Monkey基本用法与常用参数
- 下一篇: 随机变换图片