String類

描述字符串的類——String類

一浙于、String類

String類的特點:
字符串對象一旦被初始化就不會被改變

字符串定義的第一種方式——字符串常量池
字符串常量池中沒有就建立护盈,池中有,直接用

字符串常量池
擴展

2.字符串中的操作方法
(1)構(gòu)造方法

  • String(byte[] bytes)
    將一個字節(jié)數(shù)組變成字符串
將一個字節(jié)數(shù)組變成字符串
  • String(char[] value)
    分配一個新的String羞酗,使其表示字符數(shù)組參數(shù)中當前包含的字符序列腐宋。
栗子
  • String(char[] value,int offset,int count)
    取自字符數(shù)組參數(shù)一個子數(shù)組的字符
    也就是:從哪開始,取幾個
栗子

(2)字符串功能

  • 獲取

a) 獲取字符串中字符的個數(shù)(長度)
int length();

b) 根據(jù)位置獲取字符
char charAt(int index);

c) 根據(jù)字符獲取在字符串中的第一次出現(xiàn)的位置
int indexOf(int ch)
int indexOf(int ch,int fromIndex) //從指定位置進行ch的查找第一次出現(xiàn)的位置
int indexOf(String str) //索引字符串
int indexOf(String str,int fromIndex)
從后索引
int lastIndexOf(int ch)
int lastIndexOf(int ch,int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str,int fromIndex)

吃個栗子消化下

d) 獲取字符串中的一部分字符串(子串)
String substring(int beginIndex int endIndex)
該子字符串從指定的beginIndex處開始檀轨,直到索引endIndex-1處的字符胸竞。
String substring(int beginIndex)

給你個栗子
  • 轉(zhuǎn)換

a) 將字符串變成字符串數(shù)組(字符串切割)
String[] split(String regex)
涉及到正則表達式

字符串切割

b) 將字符串變成數(shù)組
char[] toCharArray();

將字符串變成數(shù)組

b) 將字符串轉(zhuǎn)換成字節(jié)數(shù)組
byte[] getBytes();

將字符串轉(zhuǎn)換成字節(jié)數(shù)組

c) 將字符串中的字母轉(zhuǎn)成大小寫
String toUpperCase(); //大寫
String toLowerCase(); //小寫

將字符串中的字母轉(zhuǎn)成大小寫

d) 將字符串中的內(nèi)容進行替換
String replace(char oldChar,char newChar);

將字符串中的內(nèi)容進行替換

e) 將字符串兩端的空白去除
String trim();

去除字符串兩端字符

f) 將字符串進行連接
String concat(String str);

將字符串進行連接
  • 判斷

a) 兩個字符串內(nèi)容是否相同
Boolean equals(Object obj);
忽略大小寫比較字符串內(nèi)容
Boolean equalsIgnoreCase(String str);

兩個字符串比較

b)字符串中是否包含指定字符串
Boolean contains(String str);

字符串中是否包含指定字符串

c) 字符串是否以指定字符串開頭参萄,是否以指定字符串結(jié)尾
Boolean startsWith(string);
Boolean endsWith(string);

字符串是否以指定字符串開頭卫枝,是否以指定字符串結(jié)尾
  • 比較

按字典順序比較兩個字符串
int compareTo(String str);
int compareToIgnoreCase(String str);//不分大小寫
相等,返回0拧揽;小于剃盾,返回小于0的值腺占;大于淤袜,返回大于0的值。

按字典順序比較兩個字符串
  • indexOf()方法
    用于返回字符(串)在當前字符串中首次出現(xiàn)的索引位置衰伯。不存在返回-1
    lastIndexOf()方法
    用于從當前字符串的末尾開始向前查找首次出現(xiàn)的規(guī)定的字符(串)

吃幾個大栗子

1.字符串數(shù)組排列

/*1.給定一個字符串數(shù)組铡羡,按照字典順序進行從小到大的排列
{"nba","abc","vba","zz","qq","haha"}
*/
/*
 * 思路:
 * 1.對數(shù)組排序∫饩ǎ可以用選擇/冒泡烦周。
 * 2.for嵌套和比較及換位。
 * 3.字符串對象比較怎顾。
 * */
public class StringPractise {
    public static void main(String[] args) {
        String[] arr = { "nba", "abc", "vba", "zz", "qq", "haha" };
        printArray(arr);
        sortString(arr);
        printArray(arr);
    }

    private static void sortString(String[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i].compareTo(arr[j]) > 0)// 字符串比較用compareTo
                    swap(arr, i, j);
            }
        }
    }

    private static void swap(String[] arr, int i, int j) {
        String temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    private static void printArray(String[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1)
                System.out.print(arr[i] + ",");
            else
                System.out.println(arr[i] + "]");
        }
    }
}
第一個栗子的味道

2.子串的次數(shù)

/*一個子串在整串中出現(xiàn)的次數(shù)
 * "nbaernbatynbauinbaopnba"
 * 
 * 思路:
 * 1.要找的子串是否存在读慎,如果存在獲取其出現(xiàn)的位置。用indexOf
 * 2.找到了槐雾,記錄出現(xiàn)的位置并在剩余的字符串中繼續(xù)查找該子串夭委,
 * 而剩余字符串的起始位置是出現(xiàn)位置+子串的長度。
 * 3.以此類推募强,通過循環(huán)完成查找株灸,如果找不到就是-1崇摄,
 * 并對i每次找到用計數(shù)器記錄
 * */
public class StringPractise2 {
    public static void main(String[] args) {
        String str = "nbaernbatynbauinbaopnba";
        String key = "nba";

        int count = getKeyStringCount(str, key);
        System.out.println("count=" + count);
    }

    public static int getKeyStringCount(String str, String key) {
        // 1.定義計數(shù)器
        int count = 0;
        // 2.定義變量,記錄key出現(xiàn)的位置
        int index = 0;

        while ((index = str.indexOf(key)) != -1) {
            str = str.substring(index + key.length());
            count++;
        }
        return count;
    }
}

第二種方法

public class Stringdemo {
      public static void main(String[] main){
          String str = "nbaernbatynbauinbaopnba";
          String key = "nba";
          int count = 0;
          int index = 0;
          while(index != -1){
              index = str.indexOf(key,index+key.length());
              count++;
          }
          System.out.println(count);
      }
}

這個在數(shù)據(jù)結(jié)構(gòu)中叫匹配模式慌烧!

第二個栗子的味道逐抑!

3.最大相同的子串。

/*
 * 3.兩個字符串中最大相同的子串
 * "qwerabcdtyuiop"
 * "xabcdvbn"
 * 
 * 思想:
 * 1.取最大字符串屹蚊,先看短的字符串是否在長的字符串中
 * 如果存在厕氨,短的那個字符串就是最大字符串
 * 2.如果不是,就將短的子串進行長度遞減的方式去子串淑翼,再在長串中判斷是否存在
 * 如果存在就找到了腐巢!
 * */
public class StringPractise3 {
    public static void main(String[] args) {
        String s1 = "qwerabcdtyuiop";
        String s2 = "xabcdvbn";

        String s = getMaxSubstring(s1, s2);
        System.out.println("s=" + s);
    }

    public static String getMaxSubstring(String s1, String s2) {
        for (int i = 0; i < s2.length(); i++) {
            for (int a = 0, b = s2.length() - i; b != s2.length() + 1; a++, b++) {
                String sub = s2.substring(a, b);
                //System.out.println(sub);//打印得到字符串(見小栗子)
                if(s1.contains(sub))
                    return sub;
            }
        }
        return null;
    }
}
小栗子
第三個大栗子的味道

4.去除兩端空白

/*
 * 4.模擬一個trim功能一致的方法.去除字符串兩端的空白
 * 
 * 思路
 * 1.定義兩個變量
 * 一個作為從頭開始判斷字符串空格的角標。start++
 * 一個作為從尾開始判斷字符串空格的角標玄括。end--
 * 2.判斷到不是空格為止冯丙,去頭尾之間的字符串即可
 * */
public class StringPractise4 {

    public static void main(String[] args) {
        String s = "   ab  c   ";
        s = myTrim(s);
        System.out.println("-" + s + "-");
    }
    public static String myTrim(String s) {
        int start = 0;
        int end = s.length() - 1;
        while (start <= end && s.charAt(start) == ' ') {
            start++;
        }
        while (start <= end && s.charAt(end) == ' ') {
            end--;
        }
        return s.substring(start, end + 1);
    }
}
第四個栗子的味道

二、StringBuffer(字符串緩沖區(qū))

StringBuffer:就是字符串緩沖區(qū)
用于存儲數(shù)據(jù)的容器

  • 特點
    1.長度可變
    2.可以存儲不同類型的數(shù)據(jù)
    3.最終要轉(zhuǎn)成字符串進行使用
    4.可以對字符串進行修改

  • StringBuffer是一個容器遭京,所具備的功能:
    增刪改查 C(create)U(update)R(read)D(delete)

1.添加:

StringBuffer append(data)

創(chuàng)建緩沖區(qū)
方法調(diào)用鏈

StringBuffer insert(index,data)

插入

2.刪除:

StringBuffer delete(start,end)
包含頭胃惜,不包含尾
StringBuffer deleteCharAt(int index)
刪除指定位置的元素

刪除指定位置元素
清空緩沖區(qū)

3.查找:

char charAt(index);
int indexOf(string);
int lastIndexOf(string);

4.修改:

替換
StringBuffer replace(start,end,string);
void setCharAt(index,char);

替換
無返回值的替換
  • 其他方法

截取長度
StringBuffer setLength();

長度截取

內(nèi)容反轉(zhuǎn)
StringBuffer reverse()

反轉(zhuǎn)

三、StringBuilder

StringBuilder和StringBuffer的功能一樣哪雕,用法一樣
不同的是
StringBuffer:是線程同步的船殉。通常用于多線程
StringBuilder:是線程不同步的。通常用于單線程斯嚎,提高效率

最后再給你個栗子吃

/*
 * 將1個int數(shù)組變成字符串
 * 用String做
 * */
public class StringPractise {
    public static void main(String[] args) {
        int[] arr = { 3, 2, 1, 4, 8 };
        String s = arrayToString(arr);
        System.out.println(s);
    }

    public static String arrayToString(int[] arr) {
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1)
                str += arr[i] + ",";
            else
                str += arr[i] + "]";
        }
        return str;

    }
}

上述方法會產(chǎn)生無數(shù)個常量

/*
 * 將1個int數(shù)組變成字符串
 * 用StringBuilder來做
 * */
public class StringBuilderPractise {
    public static void main(String[] args) {
        int[] arr = { 3, 2, 1, 4, 8 };
        String s = arrayToString_2(arr);
        System.out.println(s);
    }

    public static String arrayToString_2(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1)
                sb.append(arr[i] + ",");
            else
                sb.append(arr[i] + "]");
        }
        return sb.toString();
    }
}

此方法只會產(chǎn)生一個數(shù)組
因此建議用容器

栗子的味道利虫!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市堡僻,隨后出現(xiàn)的幾起案子糠惫,更是在濱河造成了極大的恐慌,老刑警劉巖钉疫,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼讽,死亡現(xiàn)場離奇詭異,居然都是意外死亡牲阁,警方通過查閱死者的電腦和手機固阁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城菊,“玉大人备燃,你說我怎么就攤上這事×杌#” “怎么了并齐?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我冀膝,道長唁奢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任窝剖,我火速辦了婚禮麻掸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赐纱。我一直安慰自己脊奋,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布疙描。 她就那樣靜靜地躺著诚隙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪起胰。 梳的紋絲不亂的頭發(fā)上久又,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音效五,去河邊找鬼地消。 笑死,一個胖子當著我的面吹牛畏妖,可吹牛的內(nèi)容都是我干的脉执。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼戒劫,長吁一口氣:“原來是場噩夢啊……” “哼半夷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迅细,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤巫橄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疯攒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗦随,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡列荔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年敬尺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴浙。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡砂吞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崎溃,到底是詐尸還是另有隱情蜻直,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站概而,受9級特大地震影響呼巷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赎瑰,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一王悍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧餐曼,春花似錦压储、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踩娘,卻和暖如春刮刑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背养渴。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工为朋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厚脉。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像鸯匹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 在編寫程序的過程中尔苦,不了避免的要用到字符串,所以String類的常用方法的用法是必須掌握的。學習一個類的使用方法最...
    Geg_Wuz閱讀 1,250評論 0 4
  • 1.String 類的Api文檔如下 public final class String extends Obje...
    JC_Hou閱讀 1,869評論 0 6
  • 一轻腺、String 類 1、定義: 1误算、從概念上講,java字符串就是Unicode字符序列。每個用雙引號括起來的字...
    玉圣閱讀 1,566評論 0 1
  • 一陵霉、String類 String類在java.lang包中,java使用String類創(chuàng)建一個字符串變量睹酌,字符串變...
    wlw_花田半畝閱讀 430評論 0 1
  • 2015士复,行將結(jié)束,為了能給未來的自己一個參考的標的,做個總結(jié)。 剛回看了14年的總結(jié)”,現(xiàn)在看來嵌莉,居然覺得有點太...
    不知了閱讀 947評論 3 22