day12-Scanner類和String類

12.1 Scanner類

  • 一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器
  • 定義: public final class Scanner extends Object
12.1.1 Scanner基本鍵盤錄入
Scanner scanner = new Scanner(System.in); //控制臺鍵盤錄入
System.out.println("請輸入一個int數(shù),輸入0退出跃巡!");
while (true) {
    if (scanner.hasNextInt()) {  //判斷輸入的內(nèi)容,Scanner有很多判斷類型的方法
        int number = scanner.nextInt();
        if ( 0 == number) break;
        System.out.println("輸入的內(nèi)容是: " + number);
    }else {
        System.err.println("輸入類型不是int素邪。退出程序。");
        break;
    }
}
scanner.close();

//nextInt()是鍵盤錄入整數(shù)的方法偷线,當(dāng)我們錄入10的時候
//其實鍵盤上錄入的是10和\r\n,nextInt()方法只獲取了10就結(jié)束了
//nextLine()是鍵盤錄入字符串的方法乏奥,可以接收任意類型,通過\r\n來判斷錄入一行是否結(jié)束
解決方法:1邓了,創(chuàng)建2個Scanner對象歇式;2,使用nextLine()接收痕鳍。

12.2 String類

  • a: 字符串字面值"abc"也可以看成一個字符串對象
  • b: 字符串是常量龙巨,一旦賦值,就不能被改變

使用構(gòu)造方法初始化的例子:

byte[] arr1 = {97,98,99,45};
String s1 = new String(arr1);  //通過byte數(shù)組初始化
System.out.println(s1);  //輸出 abc-(通過當(dāng)前平臺的字符集碼表旨别,來解碼成字符串的)

byte[] arr2 = s1.getBytes(); //字符串又轉(zhuǎn)為碼表值
System.out.println(arr2[0]+".."+arr2[1]);

char data[] = {'a','c','z','o','5'};
String s2 = new String(data);    //字符串成串,就是字符串
System.out.println(s2);
12.2.1 String面試題
// 第一題 (常量池屬于方法區(qū)的一部分)
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);      //?為什么铭若?因為同樣值的字符串递览,在常量池只有一份,所以地址值也相等
System.out.println(s1.equals(s2)); //肯定是true

// 第二題 下面這句話在內(nèi)存中創(chuàng)建了幾個對象镜雨?
String s3 = new String("abc");
// 答:2個儿捧,常量池一個,然后拷貝副本一個到 堆內(nèi)存一個(因為有new)菲盾,棧區(qū)的s3指向堆內(nèi)存的"abc"

// 第三題
String a1 = new String("abc");
String a2 = "abc";
System.out.println( a1 == a2); //false 一個堆地址,一個常量池地址
System.out.println( a1.equals(a2));  //肯定是true

// 第四題
String q1 = "a" + "b" + "c";
String q2 = "abc";
System.out.println( q1 == q2); //true,Java中有常量優(yōu)化機制瞭空,a-b-c相加,編譯時就優(yōu)化成了abc
System.out.println( q1.equals(q2));  //肯定是true

// 第五題
String z1 = "ab";
String z2 = "abc";
String z3 = z1 + "c";  //這里是 變量 + 常量南捂,跟上面abc相加是不一樣的
System.out.println(z2 == z3); //false 一個在堆內(nèi)存旧找,一個在常量池
System.out.println(z2.equals(z3));   //肯定是true
第五題內(nèi)存圖.png
字符串內(nèi)存.png
12.2.2 String常用判斷方法
boolean equals(Object anObject) //比較兩個字符串是否相同,區(qū)分大小寫
boolean equalsIgnoreCase(String anotherString) //比較兩個字符串是否相同鞭缭,忽略大小寫
boolean contains(CharSequence s) //判斷字符串是否包含字符串s
boolean startsWith(String s) //判斷字符串是否以某個字符串s開頭
boolean endsWith(String s) //判斷字符串是否以某個字符串s結(jié)尾
boolean isEmpty() //判斷字符串是否為空(長度為0)

"" 和 null 的區(qū)別
"" 是字符串常量魏颓,同時也是String類對象,可以調(diào)用String類的所有方法
null 是空常量沦童,不能調(diào)用任何方法叹话,否則出現(xiàn)空指針異常,null可以給任何引用數(shù)據(jù)類型賦值驼壶!

12.2.2 String的獲取功能(截取)
int length() //獲取字符串的長度(數(shù)組的長度是屬性,字符串的長度是方法)
char charAt(int index) //獲取字符串指定位置的字符(可能字符串索引越界異常)
int indexOf(char c) //獲取字符c在字符串中出現(xiàn)的第一個位置泵喘,無則返回-1
int indexof(String str) //返回字符串str在字符串出現(xiàn)的第一個位置般妙,無則返回-1
int indexOf(int ch, int fromIndex)  //字符在字符串中出現(xiàn)的第一個位置,從fromIndex開始匹配
int indexOf(String ss, int fromIndex)  //字符串在字符串中出現(xiàn)的第一個位置股冗,從fromIndex開始匹配
lastIndexOf(xx) //跟indexof相反和蚪,從結(jié)尾開始匹配位置,值還是從正開始的怯疤,無則返回-1


String substring(int beginIndex) //從指定位置截取字符串(包含此位置)催束,默認(rèn)到末尾。
String substring(int beginIndex, int endIndex)  //截取字符串,從哪截取到哪塔淤,包含頭,不含尾
12.2.2 String的遍歷
String string = "遍歷字符串";
for (int i = 0; i < string.length(); i++) {
    System.out.println(string.charAt(i));
}
12.2.2 題目:統(tǒng)計不同類型字符的個數(shù)
// 需求:統(tǒng)計字符串中大寫字符高蜂,小寫字符,數(shù)字字符稿饰,其他字符出現(xiàn)的次數(shù)
//分析:字符值都是有范圍的露泊,通過范圍來判斷是否包含該字符
String string = "Aabbcc123*&^$-a1@";
int big = 0, small=0, num=0, other=0;

for (int i = 0; i < string.length(); i++) {
    char c = string.charAt(i);
    if (c >= 'A' && c <= 'Z') big++;
    else if (c >= 'a' && c <= 'z') small++;
    else if (c >= '0' && c <= '9') num++;
    else other++;
}
12.2.4 String常用轉(zhuǎn)換方法
byte[] getBytes() //把字符串轉(zhuǎn)為碼表值(中文有時候是GBK碼表)
char[] toCharArray() //把字符串轉(zhuǎn)為char數(shù)組
static String valueOf(char data[])  //把字符數(shù)組,轉(zhuǎn)為字符串
static String valueOf(int i)     //把int轉(zhuǎn)為字符串
static String valueOf(double d)  //把double轉(zhuǎn)為字符串
    //valueOf可以將任意類型的對象侣姆,轉(zhuǎn)為字符串

String toLowerCase() //將字符串轉(zhuǎn)為小寫
String toUpperCase() //將字符串轉(zhuǎn)為大寫
String concat(String str)  //字符串拼接脖咐,沒有 + 號拼接強大
12.2.5 題目:轉(zhuǎn)換字符
//需求: 把第一個字符串首字母大寫,其余小寫
String s = "loveXXOO";
String re = s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());
System.out.println(re);  //注意上面的鏈?zhǔn)骄幊坛テ荆捌诳梢苑珠_寫
12.2.5 題目:把數(shù)組轉(zhuǎn)為字符串
int[] arr = {1,3,5,68};
String string = "[";
for (int i = 0; i < arr.length; i++) {
    if (i == (arr.length - 1))  //其實根據(jù)運算符號的優(yōu)先級派歌,不加里面的()也是可以的
        string = string + arr[i] + "]";
    else 
        string = string + arr[i] + ",";
}  // if else 不加{},是為了節(jié)省篇幅胶果,建議加上

System.out.println(string);
12.2.6 String的其他功能
String replace(char old, char new) //替換字符串中的字符,返回新的字符串霎烙。不存在返回原字符串

String replace(String old, String new) //同上
String trim()  //去掉字符串兩端的空格蕊连,中間不會去掉

int compareTo(String ss) //比較兩個字符串,按照碼表值比較(Unicode)
int compareToIgnoreCase(String str) //比較2個字符串甘苍,不區(qū)分大小寫
12.2.7 題目:字符串反轉(zhuǎn)
String s = "123456", s2 = "";

for (int i = 0; i < s.length(); i++) {
    s2 = s.charAt(i) + s2;
}

System.out.println(s2);
12.2.8 題目:字符串出現(xiàn)的次數(shù)
// 需求:求s2在s中出現(xiàn)的個數(shù)
String s = "qwe12-qwe12-qwe12-qwe12-qwe12-";
String s2 = "12";

int count = 0 ;    //出現(xiàn)的次數(shù)
int formIndex = 0; //從什么位置開始匹配
while ( (formIndex = s.indexOf(s2)) != -1 ) {
    count++;
    s = s.substring(formIndex+s2.length());
}
System.out.println(count);

END载庭。
我是小侯爺廊佩。
在魔都艱苦奮斗靖榕,白天是上班族,晚上是知識服務(wù)工作者序矩。
如果讀完覺得有收獲的話,記得關(guān)注和點贊哦瓶蝴。
非要打賞的話租幕,我也是不會拒絕的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男窟,一起剝皮案震驚了整個濱河市贾富,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颤枪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扇住,死亡現(xiàn)場離奇詭異盗胀,居然都是意外死亡,警方通過查閱死者的電腦和手機票灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門屑迂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屈糊,你說我怎么就攤上這事琼了》蛏危” “怎么了昧诱?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵盏档,是天一觀的道長凶掰。 經(jīng)常有香客問我蜈亩,道長,這世上最難降的妖魔是什么畅涂? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任道川,我火速辦了婚禮,結(jié)果婚禮上臊岸,老公的妹妹穿的比我還像新娘尊流。我一直安慰自己,他們只是感情好奠旺,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布响疚。 她就那樣靜靜地躺著,像睡著了一般忿晕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上践盼,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天咕幻,我揣著相機與錄音,去河邊找鬼肄程。 笑死选浑,一個胖子當(dāng)著我的面吹牛玄叠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隧膘,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺惫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肌蜻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤篡撵,失蹤者是張志新(化名)和其女友劉穎豆挽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膛檀,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡娘侍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年憾筏,在試婚紗的時候發(fā)現(xiàn)自己被綠了嚎杨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氧腰。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡古拴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黄痪,到底是詐尸還是另有隱情,我是刑警寧澤桅打,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站叠纷,受9級特大地震影響潦嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜航厚,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一锰蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芹扭,春花似錦、人聲如沸辅肾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍杜。三九已至,卻和暖如春概龄,著一層夾襖步出監(jiān)牢的瞬間熬词,已是汗流浹背旁钧。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工歪今, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颜矿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓骑疆,卻偏偏與公主長得像替废,于是被迫代替她去往敵國和親泊柬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理状答,服務(wù)發(fā)現(xiàn)刀崖,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 【程序1】 題目:古典問題:有一對兔子馆截,從出生后第3個月起每個月都生一對兔子蜂莉,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,135評論 0 41
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法翎蹈,內(nèi)部類的語法,繼承相關(guān)的語法荤堪,異常的語法枢赔,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,745評論 0 33
  • 寫作是我面臨的最最困難的事情碎赢,而我很慶幸遇到了一個很棒的英語老師速梗。我從他的課堂中學(xué)到了很多有用的寫作方法和思路。因...
    箋嬋閱讀 794評論 0 0