1. 程式人生 > 其它 >13(02)總結StringBuffer,StringBuilder,陣列高階,Arrays,Integer,Character

13(02)總結StringBuffer,StringBuilder,陣列高階,Arrays,Integer,Character

(3)Arrays工具類

A:是針對陣列進行操作的工具類。包括排序和查詢等功能。

B:要掌握的方法(自己補齊方法)

把陣列轉成字串:public static String toString(int[]a)

排序: public static void sort(int[]a)

二分查詢: public static int binarySearch(int[]a,int key)

import java.util.Arrays;
/*
 * Arrays:針對陣列進行操作的工具類。比如說排序和查詢。
 * 1:public static String toString(int[] a) 把陣列轉成字串
 * 2:public static void sort(int[] a) 對陣列進行排序
 * 3:public static int binarySearch(int[] a,int key) 二分查詢
 */
public class ArraysDemo {
 public static void main(String[] args) {
 // 定義一個數組
 int[] arr = { 24, 69, 80, 57, 13 };
 // public static String toString(int[] a) 把陣列轉成字串
 System.out.println("排序前:" + Arrays.toString(arr));
 // public static void sort(int[] a) 對陣列進行排序
 Arrays.sort(arr);
 System.out.println("排序後:" + Arrays.toString(arr));
 // [13, 24, 57, 69, 80]
 // public static int binarySearch(int[] a,int key) 二分查詢
 System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));
 System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
 }
}

(4)Arrays工具類的原始碼解析

public static String toString(int[] a)
public static void sort(int[] a) 底層是快速排序,知道就可以了。有空看,有問題再問我
public static int binarySearch(int[] a,int key)

開發原則:

只要是物件,我們就要判斷該物件是否為null。

int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:" + Arrays.toString(arr));
public static String toString(int[] a) {
 //a -- arr -- { 24, 69, 80, 57, 13 }
    if (a == null)
        return "null"; //說明陣列物件不存在
    int iMax = a.length - 1; //iMax=4;
    if (iMax == -1)
        return "[]"; //說明陣列存在,但是沒有元素。
    StringBuilder b = new StringBuilder();
    b.append('['); //"["
    for (int i = 0; ; i++) {
        b.append(a[i]); //"[24, 69, 80, 57, 13"
        if (i == iMax)
  //"[24, 69, 80, 57, 13]"
            return b.append(']').toString();
        b.append(", "); //"[24, 69, 80, 57, "
    }
}
-----------------------------------------------------
int[] arr = {13, 24, 57, 69, 80};
System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
public static int binarySearch(int[] a, int key) {
 //a -- arr -- {13, 24, 57, 69, 80}
 //key -- 577
    return binarySearch0(a, 0, a.length, key);
}
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                 int key) {
    //a -- arr --  {13, 24, 57, 69, 80}
    //fromIndex -- 0
    //toIndex -- 5
    //key -- 577                           
    int low = fromIndex; //low=0
    int high = toIndex - 1; //high=4
    while (low <= high) {
        int mid = (low + high) >>> 1; //mid=2,mid=3,mid=4
        int midVal = a[mid]; //midVal=57,midVal=69,midVal=80
        if (midVal < key)
            low = mid + 1; //low=3,low=4,low=5
        else if (midVal > key)
            high = mid - 1;
        else
            return mid; // key found
    }
    return -(low + 1);  // key not found.
}

(5)把字串中的字元進行排序

舉例:

"edacbgf"

得到結果

"abcdefg"

package cn.itcast_03;

/*

* 把字串中的字元進行排序。

* 舉例:"dacgebf"

* 結果:"abcdefg"

*

* 分析:

* A:定義一個字串

* B:把字串轉換為字元陣列

* C:把字元陣列進行排序

* D:把排序後的字元陣列轉成字串

* E:輸出最後的字串

*/

public class ArrayTest {
 public static void main(String[] args) {
 // 定義一個字串
 String s = "dacgebf";
 // 把字串轉換為字元陣列
 char[] chs = s.toCharArray();
 // 把字元陣列進行排序
 bubbleSort(chs);
 //把排序後的字元陣列轉成字串
 String result = String.valueOf(chs);
 //輸出最後的字串
 System.out.println("result:"+result);
 }
 // 氣泡排序
 public static void bubbleSort(char[] chs) {
 for (int x = 0; x < chs.length - 1; x++) {
 for (int y = 0; y < chs.length - 1 - x; y++) {
 if (chs[y] > chs[y + 1]) {
 char temp = chs[y];
 chs[y] = chs[y + 1];
 chs[y + 1] = temp;
 }
 }
 }
 }
}

3:Integer(掌握)

(1)為了讓基本型別的資料進行更多的操作,Java就為每種基本型別提供了對應的包裝類型別

byte Byte

short Short

int Integer

long Long

float Float

double Double

char Character

boolean Boolean

/*

* 需求1:我要求大家把100這個資料的二進位制,八進位制,十六進位制計算出來

* 需求2:我要求大家判斷一個數據是否是int範圍內的。

* 首先你的知道int的範圍是多大?

*

* 為了對基本資料型別進行更多的操作,更方便的操作,Java就針對每一種基本資料型別提供了對應的類型別。包裝類型別。

* byte Byte

* short Short

* int Integer

* long Long

* float Float

* double Double

* char Character

* boolean Boolean

*

* 用於基本資料型別與字串之間的轉換。

 */
public class IntegerDemo {
 public static void main(String[] args) {
 // 不麻煩的就來了
 // public static String toBinaryString(int i)
 System.out.println(Integer.toBinaryString(100));
 // public static String toOctalString(int i)
 System.out.println(Integer.toOctalString(100));
 // public static String toHexString(int i)
 System.out.println(Integer.toHexString(100));
 // public static final int MAX_VALUE
 System.out.println(Integer.MAX_VALUE);
 // public static final int MIN_VALUE
 System.out.println(Integer.MIN_VALUE);
 }
}

(2)Integer的構造方法

A:Integer i = new Integer(100);

B:Integer i = new Integer("100");

注意:這裡的字串必須是由數字字元組成

package cn.itcast_02;

/*
 * Integer的構造方法:
 * public Integer(int value)
 * public Integer(String s)
 *  注意:這個字串必須是由數字字元組成
 */
public class IntegerDemo {
 public static void main(String[] args) {
 // 方式1
 int i = 100;
 Integer ii = new Integer(i);
 System.out.println("ii:" + ii);
 // 方式2
 String s = "100";
 // NumberFormatException
 // String s = "abc";
 Integer iii = new Integer(s);
 System.out.println("iii:" + iii);
 }
}

(3)String和int的相互轉換

A:String -- int

Integer.parseInt("100");

B:int -- String

String.valueOf(100);

/*
 * int型別和String型別的相互轉換
 * 
 * int -- String
 *  String.valueOf(number)
 * 
 * String -- int
 *  Integer.parseInt(s)
 */
public class IntegerDemo {
 public static void main(String[] args) {
 // int -- String
 int number = 100;
 // 方式1
 String s1 = "" + number;
 System.out.println("s1:" + s1);
 // 方式2
 String s2 = String.valueOf(number);
 System.out.println("s2:" + s2);
 // 方式3
 // int -- Integer -- String
 Integer i = new Integer(number);
 String s3 = i.toString();
 System.out.println("s3:" + s3);
 // 方式4
 // public static String toString(int i)
 String s4 = Integer.toString(number);
 System.out.println("s4:" + s4);
 System.out.println("-----------------");
 // String -- int
 String s = "100";
 // 方式1
 // String -- Integer -- int
 Integer ii = new Integer(s);
 // public int intValue()
 int x = ii.intValue();
 System.out.println("x:" + x);
 //方式2
 //public static int parseInt(String s)
 int y = Integer.parseInt(s);
 System.out.println("y:"+y);
 }
}

(4)其他的功能(瞭解)

進位制轉換

/*
 * 常用的基本進位制轉換
 * public static String toBinaryString(int i)
 * public static String toOctalString(int i)
 * public static String toHexString(int i)
 * 
 * 十進位制到其他進位制
 * public static String toString(int i,int radix)
 * 由這個我們也看到了進位制的範圍:2-36
 * 為什麼呢?0,...9,a...z
 * 
 * 其他進位制到十進位制
 * public static int parseInt(String s,int radix)
 */
public class IntegerDemo {
 public static void main(String[] args) {
 // 十進位制到二進位制,八進位制,十六進位制
 System.out.println(Integer.toBinaryString(100));
 System.out.println(Integer.toOctalString(100));
 System.out.println(Integer.toHexString(100));
 System.out.println("-------------------------");
 // 十進位制到其他進位制
 System.out.println(Integer.toString(100, 10));
 System.out.println(Integer.toString(100, 2));
 System.out.println(Integer.toString(100, 8));
 System.out.println(Integer.toString(100, 16));
 System.out.println(Integer.toString(100, 5));
 System.out.println(Integer.toString(100, 7));
 System.out.println(Integer.toString(100, -7));
 System.out.println(Integer.toString(100, 70));
 System.out.println(Integer.toString(100, 1));
 System.out.println(Integer.toString(100, 17));
 System.out.println(Integer.toString(100, 32));
 System.out.println(Integer.toString(100, 37));
 System.out.println(Integer.toString(100, 36));
 System.out.println("-------------------------");
 //其他進位制到十進位制
 System.out.println(Integer.parseInt("100", 10));
 System.out.println(Integer.parseInt("100", 2));
 System.out.println(Integer.parseInt("100", 8));
 System.out.println(Integer.parseInt("100", 16));
 System.out.println(Integer.parseInt("100", 23));
 //NumberFormatException
 //System.out.println(Integer.parseInt("123", 2));
 }
}

(5)JDK5的新特性

自動裝箱 基本型別--引用型別

自動拆箱 引用型別--基本型別

把下面的這個程式碼理解即可:

 Integer i = 100;
 i += 200;
/*
 * JDK5的新特性
 * 自動裝箱:把基本型別轉換為包裝類型別    Integer類中valueof
 * 自動拆箱:把包裝類型別轉換為基本型別    Integer類中intValue
 * 
 * 注意一個小問題:
 *  在使用時,Integer  x = null;程式碼就會出現NullPointerException。
 *  建議先判斷是否為null,然後再使用。
 */
public class IntegerDemo {
 public static void main(String[] args) {
 // 定義了一個int型別的包裝類型別變數i
 // Integer i = new Integer(100);
 Integer ii = 100;
 ii += 200;
 System.out.println("ii:" + ii);
 // 通過反編譯後的程式碼
 // Integer ii = Integer.valueOf(100); //自動裝箱
 // ii = Integer.valueOf(ii.intValue() + 200); //自動拆箱,再自動裝箱
 // System.out.println((new StringBuilder("ii:")).append(ii).toString());
 Integer iii = null;
 // NullPointerException
 if (iii != null) {
 iii += 1000;
 System.out.println(iii);
 }
 }
}
 (6)面試題

-128到127之間的資料緩衝池問題

字元方法區中存在一個位元組常量池

/*
 * 看程式寫結果
 * 
 * 注意:Integer的資料直接賦值,如果在-128到127之間,會直接從緩衝池裡獲取資料
 */
public class IntegerDemo {
 public static void main(String[] args) {
 Integer i1 = new Integer(127);
 Integer i2 = new Integer(127);
 System.out.println(i1 == i2);
 System.out.println(i1.equals(i2));
 System.out.println("-----------");
 Integer i3 = new Integer(128);
 Integer i4 = new Integer(128);
 System.out.println(i3 == i4);
 System.out.println(i3.equals(i4));
 System.out.println("-----------");
 Integer i5 = 128;
 Integer i6 = 128;
 System.out.println(i5 == i6);
 System.out.println(i5.equals(i6));
 System.out.println("-----------");
 Integer i7 = 127;
 Integer i8 = 127;
 System.out.println(i7 == i8);
 System.out.println(i7.equals(i8));
 // 通過檢視原始碼,我們就知道了,針對-128到127之間的資料,做了一個數據緩衝池,如果資料是該範圍內的,每次並不建立新的空間
 // Integer ii = Integer.valueOf(127);
 }
}
4:Character(瞭解)
 (1)Character構造方法 
 Character ch = new Character('a');
/*
 * Character 類在物件中包裝一個基本型別 char 的值
 * 此外,該類提供了幾種方法,以確定字元的類別(小寫字母,數字,等等),並將字元從大寫轉換成小寫,反之亦然
 * 
 * 構造方法:
 *  Character(char value)
 */
public class CharacterDemo {
 public static void main(String[] args) {
 // 建立物件
 // Character ch = new Character((char) 97);
 Character ch = new Character('a');
 System.out.println("ch:" + ch);
 }
}

(2)要掌握的方法:(自己補齊)

A:判斷給定的字元是否是大寫

B:判斷給定的字元是否是小寫

C:判斷給定的字元是否是數字字元

D:把給定的字元轉成大寫

E:把給定的字元轉成小寫

/*
 * public static boolean isUpperCase(char ch):判斷給定的字元是否是大寫字元
 * public static boolean isLowerCase(char ch):判斷給定的字元是否是小寫字元
 * public static boolean isDigit(char ch):判斷給定的字元是否是數字字元
 * public static char toUpperCase(char ch):把給定的字元轉換為大寫字元
 * public static char toLowerCase(char ch):把給定的字元轉換為小寫字元
 */
public class CharacterDemo {
 public static void main(String[] args) {
 // public static boolean isUpperCase(char ch):判斷給定的字元是否是大寫字元
 System.out.println("isUpperCase:" + Character.isUpperCase('A'));
 System.out.println("isUpperCase:" + Character.isUpperCase('a'));
 System.out.println("isUpperCase:" + Character.isUpperCase('0'));
 System.out.println("-----------------------------------------");
 // public static boolean isLowerCase(char ch):判斷給定的字元是否是小寫字元
 System.out.println("isLowerCase:" + Character.isLowerCase('A'));
 System.out.println("isLowerCase:" + Character.isLowerCase('a'));
 System.out.println("isLowerCase:" + Character.isLowerCase('0'));
 System.out.println("-----------------------------------------");
 // public static boolean isDigit(char ch):判斷給定的字元是否是數字字元
 System.out.println("isDigit:" + Character.isDigit('A'));
 System.out.println("isDigit:" + Character.isDigit('a'));
 System.out.println("isDigit:" + Character.isDigit('0'));
 System.out.println("-----------------------------------------");
 // public static char toUpperCase(char ch):把給定的字元轉換為大寫字元
 System.out.println("toUpperCase:" + Character.toUpperCase('A'));
 System.out.println("toUpperCase:" + Character.toUpperCase('a'));
 System.out.println("-----------------------------------------");
 // public static char toLowerCase(char ch):把給定的字元轉換為小寫字元
 System.out.println("toLowerCase:" + Character.toLowerCase('A'));
 System.out.println("toLowerCase:" + Character.toLowerCase('a'));
 }
}

(3)案例:

統計字串中大寫,小寫及數字字元出現的次數

import java.util.Scanner;
/*
 * 統計一個字串中大寫字母字元,小寫字母字元,數字字元出現的次數。(不考慮其他字元)
 * 
 * 分析:
 *  A:定義三個統計變數。
 *  int bigCont=0;
 *  int smalCount=0;
 *  int numberCount=0;
 *  B:鍵盤錄入一個字串。
 *  C:把字串轉換為字元陣列。
 *  D:遍歷字元陣列獲取到每一個字元
 *  E:判斷該字元是
 *  大寫 bigCount++;
 *  小寫 smalCount++;
 *  數字 numberCount++;
 *  F:輸出結果即可
 */
public class CharacterTest {
 public static void main(String[] args) {
 // 定義三個統計變數。
 int bigCount = 0;
 int smallCount = 0;
 int numberCount = 0;
 // 鍵盤錄入一個字串。
 Scanner sc = new Scanner(System.in);
 System.out.println("請輸入一個字串:");
 String line = sc.nextLine();
 // 把字串轉換為字元陣列。
 char[] chs = line.toCharArray();
 // 歷字元陣列獲取到每一個字元
 for (int x = 0; x < chs.length; x++) {
 char ch = chs[x];
 // 判斷該字元
 if (Character.isUpperCase(ch)) {
 bigCount++;
 } else if (Character.isLowerCase(ch)) {
 smallCount++;
 } else if (Character.isDigit(ch)) {
 numberCount++;
 }
 }
 // 輸出結果即可
 System.out.println("大寫字母:" + bigCount + "個");
 System.out.println("小寫字母:" + smallCount + "個");
 System.out.println("數字字元:" + numberCount + "個");
 }
}