Java基礎(chǔ)語法(2)

一. Java String 類

字符串廣泛應(yīng)用 在Java 編程中抗俄,在 Java 中字符串屬于對象,Java 提供了 String 類來創(chuàng)建和操作字符串埃脏。

創(chuàng)建字符串

創(chuàng)建字符串最簡單的方式如下:

String greeting = "菜鳥教程";

在代碼中遇到字符串常量時患朱,這里的值是 "菜鳥教程"牢酵,編譯器會使用該值創(chuàng)建一個 String 對象。

和其它對象一樣谊却,可以使用關(guān)鍵字和構(gòu)造方法來創(chuàng)建 String 對象柔昼。

String 類有 11 種構(gòu)造方法,這些方法提供不同的參數(shù)來初始化字符串炎辨,比如提供一個字符數(shù)組參數(shù):


public class StringDemo{  public static void main(String args[]){      char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};

      String helloString = new String(helloArray); 

      System.out.println( helloString );

  }}

運(yùn)行結(jié)果如下:

runoob

注意:String 類是不可改變的捕透,所以你一旦創(chuàng)建了 String 對象,那它的值就無法改變了碴萧。

如果需要對字符串做很多修改乙嘀,那么應(yīng)該選擇使用 StringBuffer & StringBuilder 類

字符串長度

用于獲取有關(guān)對象的信息的方法稱為訪問器方法破喻。

String 類的一個訪問器方法是 length() 方法虎谢,它返回字符串對象包含的字符數(shù)。

下面的代碼執(zhí)行后曹质,len變量等于14:


public class StringDemo {    

public static void main(String args[]) {  

      String site = "www.runoob.com";

        int len = site.length();

        System.out.println( "菜鳥教程網(wǎng)址長度 : " + len );

  }

}

運(yùn)行結(jié)果如下:

菜鳥教程網(wǎng)址長度 : 14

String 方法

下面是 String 類支持的方法婴噩,更多詳細(xì)擎场,參看 Java String API文檔:

SN(序號) 方法描述
1 char charAt(int index)返回指定索引處的 char 值。
2 int compareTo(Object o)把這個字符串和另一個對象比較几莽。
3 int compareTo(String anotherString)按字典順序比較兩個字符串迅办。
4 int compareToIgnoreCase(String str)按字典順序比較兩個字符串,不考慮大小寫章蚣。
5 String concat(String str)將指定字符串連接到此字符串的結(jié)尾站欺。
6 boolean contentEquals(StringBuffer sb)當(dāng)且僅當(dāng)字符串與指定的StringBuffer有相同順序的字符時候返回真。
7 static String copyValueOf(char[] data)返回指定數(shù)組中表示該字符序列的 String究驴。
8 static String copyValueOf(char[] data, int offset, int count)返回指定數(shù)組中表示該字符序列的 String镊绪。
9 boolean endsWith(String suffix)測試此字符串是否以指定的后綴結(jié)束。
10 boolean equals(Object anObject)將此字符串與指定的對象比較洒忧。
11 boolean equalsIgnoreCase(String anotherString)將此 String 與另一個 String 比較蝴韭,不考慮大小寫。
12 byte[] getBytes() 使用平臺的默認(rèn)字符集將此 String 編碼為 byte 序列熙侍,并將結(jié)果存儲到一個新的 byte 數(shù)組中榄鉴。
13 byte[] getBytes(String charsetName)使用指定的字符集將此 String 編碼為 byte 序列,并將結(jié)果存儲到一個新的 byte 數(shù)組中蛉抓。
14 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)將字符從此字符串復(fù)制到目標(biāo)字符數(shù)組庆尘。
15 int hashCode()返回此字符串的哈希碼。
16 int indexOf(int ch)返回指定字符在此字符串中第一次出現(xiàn)處的索引巷送。
17 int indexOf(int ch, int fromIndex)返回在此字符串中第一次出現(xiàn)指定字符處的索引驶忌,從指定的索引開始搜索。
18 int indexOf(String str) 返回指定子字符串在此字符串中第一次出現(xiàn)處的索引笑跛。
19 int indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出現(xiàn)處的索引付魔,從指定的索引開始。
20 String intern() 返回字符串對象的規(guī)范化表示形式飞蹂。
21 int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出現(xiàn)處的索引几苍。
22 int lastIndexOf(int ch, int fromIndex)返回指定字符在此字符串中最后一次出現(xiàn)處的索引,從指定的索引處開始進(jìn)行反向搜索陈哑。
23 int lastIndexOf(String str)返回指定子字符串在此字符串中最右邊出現(xiàn)處的索引妻坝。
24 int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出現(xiàn)處的索引,從指定的索引開始反向搜索惊窖。
25 int length()返回此字符串的長度刽宪。
26 boolean matches(String regex)告知此字符串是否匹配給定的正則表達(dá)式。
27 boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)測試兩個字符串區(qū)域是否相等爬坑。
28 boolean regionMatches(int toffset, String other, int ooffset, int len)測試兩個字符串區(qū)域是否相等纠屋。
29 String replace(char oldChar, char newChar)返回一個新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的盾计。
30 String replaceAll(String regex, String replacement)使用給定的 replacement 替換此字符串所有匹配給定的正則表達(dá)式的子字符串售担。
31 String replaceFirst(String regex, String replacement) 使用給定的 replacement 替換此字符串匹配給定的正則表達(dá)式的第一個子字符串赁遗。
32 String[] split(String regex)根據(jù)給定正則表達(dá)式的匹配拆分此字符串。
33 String[] split(String regex, int limit)根據(jù)匹配給定的正則表達(dá)式來拆分此字符串族铆。
34 boolean startsWith(String prefix)測試此字符串是否以指定的前綴開始岩四。
35 boolean startsWith(String prefix, int toffset)測試此字符串從指定索引開始的子字符串是否以指定前綴開始。
36 CharSequence subSequence(int beginIndex, int endIndex) 返回一個新的字符序列哥攘,它是此序列的一個子序列剖煌。
37 String substring(int beginIndex)返回一個新的字符串,它是此字符串的一個子字符串逝淹。
38 String substring(int beginIndex, int endIndex)返回一個新字符串耕姊,它是此字符串的一個子字符串。
39 char[] toCharArray()將此字符串轉(zhuǎn)換為一個新的字符數(shù)組栅葡。
40 String toLowerCase()使用默認(rèn)語言環(huán)境的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為小寫茉兰。
41 String toLowerCase(Locale locale)使用給定 Locale 的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為小寫。
42 String toString() 返回此對象本身(它已經(jīng)是一個字符串P来亍)规脸。
43 String toUpperCase()使用默認(rèn)語言環(huán)境的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為大寫。
44 String toUpperCase(Locale locale)使用給定 Locale 的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為大寫熊咽。
45 String trim()返回字符串的副本莫鸭,忽略前導(dǎo)空白和尾部空白。
46 static String valueOf(primitive data type x)返回給定data type類型x參數(shù)的字符串表示形式横殴。

二. 數(shù)組

數(shù)組是一種數(shù)據(jù)結(jié)構(gòu)被因, 用來存儲同一類型值的集合。通過一個整型下標(biāo)可以訪問數(shù)組中
的每一個值衫仑。

在聲明數(shù)組數(shù)組變量時氏身,需要指出數(shù)組類型(數(shù)據(jù)元素類型緊跟[])和數(shù)組變量名稱:
int[] a; //聲明了數(shù)組變量 a

該語句僅僅聲明了變量a,并沒有將a初始化為一個真正的數(shù)組,使用new運(yùn)算符創(chuàng)建數(shù)組:
int[] a = new int[100];//這條語句創(chuàng)建了一個可以儲存100個整數(shù)的數(shù)組
這個數(shù)組的下標(biāo)從0~99惑畴,一旦創(chuàng)建了一個數(shù)組,就可以為這個數(shù)組賦值航徙,例如使用一個循環(huán):

int[] a = new int[100];
for(int i=0;i<100;i++){
  a[i] = i;
}

注意

  • 創(chuàng)建一個數(shù)字?jǐn)?shù)組時如贷,所有元素都被初始化為0。
  • 創(chuàng)建一個boolen型的數(shù)組時到踏,所有元素都被初始化為false杠袱。
  • 創(chuàng)建一個對象型數(shù)組時,所有元素都被初始化為null窝稿,表示這些元素還未存放任何對象楣富。
  • 如果創(chuàng)建了一個 100 個元素的數(shù)組, 并且試圖訪問元素 a[100] (或任何在 0 ~ 99
    之外的下標(biāo)伴榔,) 程序就會引發(fā)“ array index out of bounds” 異常而終止執(zhí)行纹蝴。

要想獲得數(shù)組中的元素個數(shù)庄萎,可以使用 array.length。例如塘安,

for (int i = 0; i < a.length; i ++)
System.out.println(a[i]);

一旦創(chuàng)建了數(shù)組糠涛, 就不能再改變它的大小(盡管可以改變每一個數(shù)組元素) 如果經(jīng)常需
要在運(yùn)行過程中擴(kuò)展數(shù)組的大小, 就應(yīng)該使用另一種數(shù)據(jù)結(jié)構(gòu)—數(shù)組列表( array list)

for each 循環(huán)
Java 有一種功能很強(qiáng)的循環(huán)結(jié)構(gòu)兼犯, 可以用來依次處理數(shù)組中的每個元素(其他類型的元
素集合亦可)而不必為指定下標(biāo)值而分心忍捡。
這種增強(qiáng)的 for 循環(huán)的語句格式為:
for (variable : collection) statement
定義一個變量用于暫存集合中的每一個元素, 并執(zhí)行相應(yīng)的語句(當(dāng)然切黔, 也可以是語句塊 )砸脊。
collection 這一集合表達(dá)式必須是一個數(shù)組或者是一個實(shí)現(xiàn)了 Iterable 接口的類對象(例如
ArrayList )。 例如:

int [] a ={1, 2, 3,4};
for (int element : a)
System.out.println(element);

打印數(shù)組 a 的每一個元素纬霞,一個元素占一行凌埂。
這個循環(huán)應(yīng)該讀作“ 循環(huán) a 中的每一個元素”(for each element in a )。

提示:
有個更加簡單的方式打印數(shù)組中的所有值险领, 即利用 Arrays 類的 toString 方法侨舆。 調(diào)
用 Arrays.toString(a), 返回一個包含數(shù)組元素的字符串, 這些元素被放置在括號內(nèi)绢陌, 并
用逗號分隔挨下, 例如,“ [2,3,5,7脐湾,11 臭笆,13]”、 要想打印數(shù)組秤掌, 可以調(diào)用
System.out.println(Arrays.toString(a));

數(shù)組初始化以及匿名數(shù)組
在 Java中愁铺, 提供了一種創(chuàng)建數(shù)組對象并同時賦予初始值的簡化書寫形式。下面是一 例子:
int[] a = {2,3,5,7,11,13};
請注意闻鉴, 在使用這種語句時茵乱,不需要調(diào)用 new。
甚至還可以初始化一個匿名的數(shù)組:
new int[] { 17, 19, 23, 29, 31, 37 }
這種表示法將創(chuàng)建一個新數(shù)組并利用括號中提供的值進(jìn)行初始化孟岛, 數(shù)組的大小就是初始值的
個數(shù)瓶竭。 使用這種語法形式可以在不創(chuàng)建新變量的情況下重新初始化一個數(shù)組。 例如:
small Primes = new int[] { 17, 19, 23, 29, 31, 37 };

數(shù)組拷貝
Java允許將一個數(shù)組變量拷貝給另一個數(shù)組變量渠羞。這時斤贰,兩個數(shù)組變量將引用同一個數(shù)組(意味著改變其中一個數(shù)組的元素值,另一個數(shù)組的相同元素值也跟著改變):

public class Test {
    public static void main(String[] args) {
       int[] a = {1,2,3,4,5};
       int[] b = a;
       b[4] = 6;
       System.out.print(a[4]);
    }
}

運(yùn)行結(jié)果如下:
6
如果希望將一個數(shù)組的所有值拷貝到一個新的數(shù)組中去次询,就要使用 Arrays 類的 copyOf方法:

int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length) ;

第 2 個參數(shù)是新數(shù)組的長度荧恍。這個方法通常用來增加數(shù)組的大小:
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);

實(shí)例:

import java.util.*;

public class Test {

    public static void main(String[] args) {
       int[] a = {1,2,3,4,5};
       int[] b= Arrays.copyOf(a,2*a.length);
       b[4] = 6;

       System.out.print(a[4]);
    }

}

運(yùn)行結(jié)果如下:
5
如果數(shù)組元素是數(shù)值型屯吊,那么多余的元素將被賦值為 0 ; 如果數(shù)組元素是布爾型送巡, 則將賦值
為 false摹菠。相反, 如果長度小于原始數(shù)組的長度授艰,則只拷貝最前面的數(shù)據(jù)元素辨嗽。

數(shù)組排序
要想對數(shù)值型數(shù)組排序,可以用Array類中的sort方法:

int[] a = new int[100];
...
Arrays.sort(a);

這個方法使用了優(yōu)化的快速排序算法淮腾。

下面來研究一個例子糟需,這個例子使用了數(shù)組,它產(chǎn)生了一個抽彩游戲的隨機(jī)數(shù)值組合:

package com.company;

import java.util.*;

public class Test {

    public static void main(String[] args) {

                Scanner in = new Scanner(System.in) ;
//獲取中獎號碼總個數(shù)k
              System.out.print("How many numbers do you need to draw? ");
            int k = in.nextInt();
//獲取獎池中的號碼總數(shù)n
             System.out.print("What is the highest number you can draw? ");
           int n = in.nextInt();
 /*
*k>n拋出數(shù)組越界異常       
*           if (k>n) {
*               System.out.println("bad value!!!");
 *              return;
 *          }
*/
// 將獎池號碼總個數(shù)填入數(shù)組numbers中
                int[] numbers = new int[n];
                for (int i = 0; i < numbers.length; i++)
                    numbers [i] =i + 1;
// 將中獎號碼總個數(shù)填入數(shù)組result中
                int[] result = new int[k];
                for (int i = 0; i < result.length; i++)
                {
//在0~n-1之間取得一個隨機(jī)中獎號碼
                    int r = (int) (Math.random() * n);
// pick the element at the random location
                    result[i] = numbers[r];
// move the last element into the random location
                    numbers[r] = numbers[n - 1] ;
                    n--;
                } //print the sorted array
                Arrays.sort(result);
                System.out.println("Bet the following combination. It'll make you rich!");
                for (int r : result)
                    System.out.println(r) ;
    }

}

運(yùn)行后可能的結(jié)果如下(假如從49個中抽取3個):

Bet the following combination. It'll make you rich!
8
9
11

注意

  • int r = (int)(Math.random() * n); Math.random()會得出一個01之間的隨機(jī)數(shù)谷朝,*n則范圍變?yōu)?n,在經(jīng)過(int)強(qiáng)制類型轉(zhuǎn)換洲押,舍去小數(shù)點(diǎn)后面的數(shù)字后范圍變?yōu)?~n-1。
  • numbers[r] = numbers[n - 1] ;
    n--; 這兩條語句保證了不會出現(xiàn)重復(fù)的中獎號碼:用numbers數(shù)組的最后一個元素替代已選中的號碼圆凰,然后刪除最后一個元素杈帐。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抹镊,一起剝皮案震驚了整個濱河市霜运,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糕非,老刑警劉巖跃须,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件站叼,死亡現(xiàn)場離奇詭異,居然都是意外死亡菇民,警方通過查閱死者的電腦和手機(jī)尽楔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來第练,“玉大人阔馋,你說我怎么就攤上這事〗刻停” “怎么了呕寝?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婴梧。 經(jīng)常有香客問我壁涎,道長,這世上最難降的妖魔是什么志秃? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嚼酝,結(jié)果婚禮上浮还,老公的妹妹穿的比我還像新娘。我一直安慰自己闽巩,他們只是感情好钧舌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布担汤。 她就那樣靜靜地躺著,像睡著了一般洼冻。 火紅的嫁衣襯著肌膚如雪崭歧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天撞牢,我揣著相機(jī)與錄音率碾,去河邊找鬼。 笑死屋彪,一個胖子當(dāng)著我的面吹牛所宰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畜挥,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仔粥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蟹但?” 一聲冷哼從身側(cè)響起躯泰,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎华糖,沒想到半個月后麦向,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缅阳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年磕蛇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片十办。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秀撇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出向族,到底是詐尸還是另有隱情呵燕,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布件相,位于F島的核電站再扭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夜矗。R本人自食惡果不足惜泛范,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望紊撕。 院中可真熱鬧罢荡,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笼才,卻和暖如春漱受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骡送。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工昂羡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人各谚。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓紧憾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昌渤。 傳聞我的和親對象是個殘疾皇子赴穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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