JAVA程式設計學習記錄(API常用類(二))
System.out.println(Character.toUpperCase('a'));
第五週 API常用類(二)
一 StringBuffer類
執行緒安全的可變字元序列
概念:表示的是一個本身內容可變的字串物件,包含一個緩衝區,主要用於完成字串的動態新增、插入和替換等操作。
StringBuffer的新增功能:
public StringBuffer append(String/boolean....) :在字串緩衝區中追加資料(在末尾追加),並且返回字串緩衝區本身
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.append('A');
sb.append(true);
sb.append(1234);
sb.append(3.14);
System.out.println(sb);
public StringBuffer insert(int offset,String str):將當前str字串新增到指定位置處,它返回字串緩衝區本身
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("a1");
sb.append("b2");
sb.append("d4");
sb.append("e5");
sb.append("f6");
sb.insert(4, "c3");
System.out.println(sb);//a1b2c3d4e5f6
StringBuffer的刪除功能:
public StringBuffer deleteCharAt(int index):移除指定位置處的字元
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("a1");
sb.append("b2");
sb.append("d4");
sb.append("e5");
sb.append("f6");
//刪除‘b’這個字元
sb.deleteCharAt(2);
System.out.println(sb);//a1b2d4e5f6-->a12d4e5f6
public StringBuffer delete(int start,int end):移除從指定位置處到end-1處的子字串
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("a1");
sb.append("b2");
sb.append("d4");
sb.append("e5");
sb.append("f6");
//移除d4e5
sb.delete(4, 8);
System.out.println(sb);//a1b2d4e5f6-->a1b2f6
StringBuffer的反轉功能:
public StringBuffer reverse() :將緩衝區中的字元序列反轉取代,返回它(字串衝)本身
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("abcd1234");
sb.reverse();
System.out.println(sb);//4321dcba
StringBuffer的擷取功能:
public String substring(int start):從指定位置開始擷取,預設擷取到末尾,返回值不在是緩衝區本身,而是一個新的字串
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("HelloWorld");
//擷取world
//返回的是一個新字元,所以將擷取後的值賦給新定義的str
String str = sb.substring(5);
System.out.println(str);
public String substring(int start,int end) :從指定位置開始到指定位置結束擷取,包前不包後,返回值不在是緩衝區本身,而是一個新的字串
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("HelloWorld");
//擷取oWo
//因為包前不包後,所以截止到‘r’
String str = sb.substring(4,7);
System.out.println(str);
StringBuffer的替換功能:
public StringBuffer replace(int start,int end,String str) :從指定位置到指定位置結束,用新的str字串去替換,返回值是字串緩衝區本身
//建立一個字串緩衝區物件
StringBuffer sb = new StringBuffer();
sb.append("HelloWorld");
sb.replace(5, 10, "China");
System.out.println(sb);
StringBuffer練習
1.將陣列拼接成字串型別
package org.test_01;
public class StringBufferDemo {
public static void main(String[] args) {
//定義陣列
int [] arr = {1,2,3};
//方法一:String型別
String str = arrayToString(arr);
System.out.println(str);
//方式二:StringBuffer型別
String str2 = arrayToString2(arr);
System.out.println(str2);
}
//方式二:StringBuffer型別
private static String arrayToString2(int[] arr) {
//建立字串緩衝區物件
StringBuffer sb = new StringBuffer();
//新增左中括號
sb.append("[");
//遍歷陣列
for (int i = 0; i < arr.length; i++) {
//判斷
if(i==arr.length-1) {
sb.append(arr[i]);
}else {
sb.append(arr[i]).append(",");
}
}
//新增右中括號
sb.append("]");
return sb.toString();
}
//方式1:String型別
private static String arrayToString(int[] arr) {
//定義一個字串
String result = "";
//拼接左中括號
result += "[";
//遍歷陣列
for(int x = 0 ; x < arr.length; x++) {
//判斷
if(x==arr.length-1) {//當遍歷到最後一個陣列時拼接右中括號
result += arr[x];
result += "]";
}else {
result += arr[x];
result += ",";
}
}
return result;
}
}
2.判斷一個字串是否是對稱字串(方法改進)
package org.test_01;
/**
* 用鍵盤錄入一個字串,判斷是否對稱
*/
import java.util.Scanner;
public class StringBufferTest {
public static void main(String[] args) {
//建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
//接收資料
System.out.println("請輸入一個字串");
String line = sc.nextLine();
//方法改進
boolean flag = isSame(line);
if(flag) {
System.out.println("對稱");
}else {
System.out.println("不對稱");
}
}
public static boolean isSame(String s) {
//建立字串緩衝區物件
// StringBuffer sb = new StringBuffer(s);
// String str = sb.reverse().toString();
// return str.equals(s);
//一步完成
return new StringBuffer(s).reverse().toString().equals(s);
}
}
幾個面試題
1.StringBuffer,String,StringBuilder的區別?
StringBuffer和StringBuilder都是一個可變的字元序列,提供一個緩衝區(兩者都看做容器);
StringBuffer:執行緒安全的,同步的,執行效率低
StringBuilder:執行緒不安全的,不同步的,執行效率高,並且單執行緒中優先採用StringBuilder
StringBuffer 執行效率雖然低,但是由於String型別,並且他可變的字元序列,提供了緩衝區
2.StringBuffer和陣列的區別?
陣列: 它是可以儲存多個資料的容器,並且多個資料的型別必須一致. //陣列長度功能: length屬性
StringBuffer: 它是容器,它在字串緩衝區始終儲存的只能是字串型別的資料. //獲取緩衝區的長度: length( );
二 資料型別包裝器類
Java使用簡單的資料型別, 例如整型(int)和字元(char), 這些資料型別不是物件層次結構的組成部分. 它們通過值傳遞而不能直接通過引用傳遞給方法. 有時需要對這些簡單的型別建立物件表示式,例如, 當把資料放到集合中時, 需要首先將其包裝成物件. 為了能夠用物件的形式代表簡單資料型別, Java提供了與每一種簡單型別相對應的類. 本質上, 這些類包裝(wrap)了簡單型別的資料. 因此,通常將它們稱為型別包裝器或者包裝器類.
基本資料型別都有一個對應的包裝型別, 目的就是為了將基本資料型別可以同String型別之間互相轉換.
/**
*
* byte Byte
* short Short
* int Integer
* long Long
* float Float
* double Double
* char character
* boolean Boolean
*
*/
1. Integer類
Integer類是int型別的包裝類型別
獲取Integer的最值
public static final int MAX_VALUE //最大值
System.out.println(Integer.MAX_VALUE); //2147483647
public static final int MIN_VALUE //最小值
System.out.println(Integer.MIN_VALUE); //-2147483648
Integer提供了靜態功能:
public static String toBinaryString(int i) //以二進位制(基數 2)無符號整數形式返回一個整數引數的字串表示形式。
System.out.println(Integer.toBinaryString(10086)); //10011101100110
public static String toOctalString(int i) //以八進位制(基數 8)無符號整數形式返回一個整數引數的字串表示形式。
System.out.println(Integer.toOctalString(10086)); //23546
public static String toHexString(int i) //以十六進位制(基數 16)無符號整數形式返回一個整數引數的字串表示形式。
System.out.println(Integer.toHexString(10086)); //2766
Integer的構造方法:
public Integer(int value)
public Integer(String s)
執行時的常見異常
java.lang.NumberFormatException //當應用程式試圖將字串轉換成一種數值型別,但該字串不能轉換為適當格式時,丟擲該異常。
// Integer iii = new Integer ("abc"); //列印不出來,因為該字串不能轉換為數值型別
Integer iiii = new Integer("100"); //可以列印出來,因為用parseInt方法把字串型別轉換為數值型別
// System.out.println(iii); //丟擲異常java.lang.NumberFormatException
System.out.println(iiii);
int-->String&String-->int
將int型別轉換為String型別
valueOf ( int i )
//int-->String
int num = 100;
//方式1:字串拼接
String str = "" + num;
System.out.println(str);
//方式2:valueOf(int i)
//int-->Integer-->String
Integer i = Integer.valueOf(num);
String str2 = i.toString();
System.out.println(str2);
//方式3:靜態toString(int i) static String toString(int i)
String str3 = Integer.toString(num);
System.out.println(str3);//驗證是不是字串型別,如果是,則會自動拼接為10020
結果:
100
100
10020
將String型別轉換為int型別
static int parseInt ( String s )
//String-->int
String s ="100";
//方式1:String-->Integer-->int
Integer ii = new Integer(s);
int num1 = ii.intValue();
System.out.println(num1+20);//驗證是不是數值型別,如果是,則會自動加和為120
//方式2:(常用)public static int parseInt(String s)
int num2 = Integer.parseInt(s);
System.out.println(num2+30);//驗證是不是數值型別,如果是,則會自動加和為130
結果:
120
130
jdk5以後的特性:自動拆裝箱
String-->StringBuffer、int-->Integer(是int型別的包裝類型別)、char-->Character(char型別的包裝類型別)等等
int i = 5;
Integer ii = i ;//這是自動裝箱
int j = ii;//這是自動拆箱
//建立Integer物件
// Integer i = new Integer(100) ;
Integer i = 100 ;
i += 200; //先拆箱(Integer-->int),後裝箱(int值---->Integer)
//引用型別 += 基本型別
System.out.println("i:"+i);
/**
* 反編譯程式碼:
*
* Integer i = Integer.valueOf(100);
i = Integer.valueOf(i.intValue() + 200);//(int型別的100 +200)
System.out.println((new StringBuilder("i:")).append(i).toString());
*/
為什麼會有自動拆裝箱?
比如int和Integer,int是基本型別,Integer是是int的包裝類,在jdk5之前int不能直接賦值給Integer的,正確將int型別賦值給Integer的方式是:Integer integer = new Integer(5);而jdk5以後系統會自動完成轉換
三 Character類
Character是char型別的包裝類型別
Character類的判斷功能:
public static boolean isDigit(char ch): 確定指定字元是否為數字
System.out.println(Character.isDigit('a'));
System.out.println(Character.isDigit('0'));
public static boolean isLowerCase(int ch): 確定是否是小寫字母字元
System.out.println(Character.isUpperCase('a'));
public static boolean isUpperCase(int ch): 確定是否大寫字母字元
System.out.println(Character.isLowerCase('b'));
兩個轉換功能
public static int toLowerCase(int codePoint)
System.out.println(Character.toUpperCase('a'));
public static int toUpperCase(int codePoint)
System.out.println(Character.toLowerCase('A'));
練習:
需求:鍵盤錄入一個字串,統計當前字串中大寫字母字元,小寫字母字元,數字字元的個數(不考慮其他字元)
public class CharacterDemo {
public static void main(String[] args) {
// 定義三個統計變數
int bigCount = 0;
int smallCount = 0;
int numCount = 0;
// 建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
// 接收資料
System.out.println("請輸入一個字串:");
String line = sc.nextLine();
// 字串轉字元陣列
char[] chs = line.toCharArray();
// 遍歷
for (int i = 0; i < chs.length; i++) {
char ch = chs[i];
// 判斷統計
if (Character.isUpperCase(ch)) {
bigCount++;
} else if (Character.isLowerCase(ch)) {
smallCount++;
} else if (Character.isDigit(ch)) {
numCount++;
}
}
// 輸出結果
System.out.println("大寫字母字元有:" + bigCount + "個");
System.out.println("小寫字母字元有:" + smallCount + "個");
System.out.println("數字字元有:" + numCount + "個");
}
}
相關文章
- JAVA程式設計學習記錄(File類檔案操作)Java程式設計
- JAVA程式設計學習記錄(安裝Java)Java程式設計
- java學習(五) —— 常用API類概述JavaAPI
- JAVA程式設計學習記錄(JavaWeb-Html)Java程式設計WebHTML
- 學習記錄|Socket程式設計程式設計
- Java學習筆記記錄(二)Java筆記
- Java openrasp學習記錄(二)Java
- Java程式設計思想學習錄(連載之:內部類)Java程式設計
- Java程式設計思想學習筆記1 - 內部類Java程式設計筆記
- Java Math類方法學習記錄Java
- 程式設計學習打卡記錄貼程式設計
- 《java學習二》併發程式設計Java程式設計
- Java 常用類-程式設計師頭大的日期時間APIJava程式設計師API
- JUC併發程式設計學習筆記(七)常用的輔助類程式設計筆記
- javascript 學習記錄 -- 程式設計題集合JavaScript程式設計
- Console物件的常用api學習記錄物件API
- Java學習筆記7(Java常用類庫與工具 )Java筆記
- Java設計模式學習二Java設計模式
- 學程式設計的記錄程式設計
- java學習(七) —— API集合類JavaAPI
- JAVA學習記錄Java
- Java學習筆記--網路程式設計SocketJava筆記程式設計
- Vue 學習記錄二Vue
- 彙編學習小記(二)-順序程式設計程式設計
- Laravel restful API 學習記錄一LaravelRESTAPI
- 學習程式設計常用網站分享程式設計網站
- 黑馬程式設計師——Java學習筆記之⑦——“網路程式設計”程式設計師Java筆記
- c# 程式設計學習(二)C#程式設計
- java併發程式設計學習15--CompletableFuture(二)Java程式設計
- JAVA高階程式設計之hibernate框架學習二Java程式設計框架
- Java實驗二:類程式設計實驗Java程式設計
- Java API學習筆記(一)JavaAPI筆記
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- Java設計模式學習筆記(二) 簡單工廠模式Java設計模式筆記
- 好程式設計師Java教程分享Java之包裝類與常用類程式設計師Java
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 好程式設計師web前端培訓學習筆記Vue學習筆記之二程式設計師Web前端筆記Vue
- Java學習筆記二Java筆記