13(02)總結StringBuffer,StringBuilder,陣列高階,Arrays,Integer,Character
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 + "個");
}
}