知識回顧
流程控制:可以根據實際情況,進行選擇,有了靈h,根據動態條件決定程式執行哪些內容,不執行哪些內容,
1)順序執行
2)分支執行,它根據條件來判斷,進行選擇性執行代碼,它也是體系核心業務邏輯代碼機構,
3)回圈執行,反復執行一段代碼
3+1,例外執行,對代碼級錯誤進行預先解決方案,
案例
實作ATM機
需求:輸入一個數字,去做回應事情
輸入1:查詢,輸入2:取款,輸入3:存款,輸入4退出
package cn.tedu.flow;
import java.util.Scanner;
import org.junit.Test;
/*
* 模擬ATM運行程序
* 需求:用戶輸入數字 (Scanner java提供監控鍵盤)
* 根據用戶數字,我們做回應處理,在控制臺顯示對應操作
* 1:查詢
* 2:取款
* 3:存款
* 4:退出,結束程式
* other:提示輸入錯誤(潛在需求)
*/
public class ATM {
@Test
public void atm() {
// 1. 獲取鍵盤輸入
// 不在 java.lang.*,需要導包
// 得到系統監控設備(鍵盤)System.in 輸入設備
Scanner scanner = new Scanner(System.in);
// 死回圈,for(;;)、while(true)
while (true) {
try { // 把可能出現錯誤的代碼放入try中
int n = scanner.nextInt(); // 把鍵盤輸入的內容轉換成整數
scanner.nextLine();
// 鍵盤監控,程式運行起來,程式處于阻塞狀態(等待)如果沒有輸入包括回車
// 程式就傻傻死等,當用戶輸入值回車后,才會繼續運行程式!
System.out.println("鍵盤輸入:" + n);
// 多分支,只判斷單個值,switch更加簡潔
switch (n) {
case 1:
System.out.println("查詢");
break; // 分支執行完成跳出switch陳述句
case 2:
System.out.println("取款");
break;
case 3:
System.out.println("存款");
break;
case 4:
System.out.println("退出");
return; // 結束程式,實作退出死回圈
// Unreachable code
// System.out.println("123");
default:
System.out.println("輸入不正確,請重新輸入...");
}
} catch (Exception e) { // 捕獲例外,程式就不會報錯了
scanner.nextLine(); // 不加死回圈,后面還有個換行字符,加此句就把換行處理掉
System.out.println("出錯了:" + e.toString());
//break;
}
}
}
}
API
Application Programming Interface 應用程式介面
java給我們提供jdk,提供數萬api工具類,
我們無需自己去做,直接呼叫這些api實作我們自己個性需求,

java提供api,非常豐富,也是java強大原因,它構建軟體系統根基,形成生態鏈,這是其它語言望塵莫及!但是畢竟老了,很多東西不合時宜,但是有第三方的基于java類別庫junit、ssm這些產品支持,java還生機勃勃!
java有這么多的api從哪里入手?
java的工具類api中,最最常用,使用最頻繁字串相關api

package cn.tedu.api;
import java.util.Arrays;
import org.junit.Test;
//練習String字串常見api
public class TestString {
@Test // 轉義字符,后面字符已經不是標準字符,它賦予新的含義
public void conver() {
System.out.println("abc \t 123"); // tab展示多個空格,2,4,7字符
System.out.println("qwe \n iop"); // 回車
}
@Test // 字串連接符方法
public void concat() {
System.out.println("abc" + "123");
System.out.println("abc".concat("123"));
}
@Test // 拼串格式化方式
public void format() {
String s1 = "abc";
String s2 = "def";
String s3 = "awt";
// 日常開發中拼串最常見方式
System.out.println("字串1:" + s1 + ",字串2:" + s2 + ",字串3:" + s3);
// 以format形式,少用,第二引數Object... args 可變引數,多個引數
System.out.println(
// %s占位符,有幾個占位符,后面就有幾個引數,占位符個數引數個數必須一致
String.format("字串1:%s,字串2:%s,字串3:%s", s1, s2, s3));
}
@Test
public void len() {
String s1 = "abc";
String s2 = "def";
String s3 = "awt";
String s = "字串1:" + s1 + ",字串2:" + s2 + ",字串3:" + s3;
System.out.println(s);
System.out.println(s.length()); // 獲取字串長度
String a = "a";
String c = "中";
System.out.println(a + " " + a.length()); // 1
System.out.println(c + " " + c.length()); // 1 早期英文字母占1中文占2個,utf-8都是1
}
@Test // 去除字串兩邊空格
public void trim() {
String s = " CGB 培優 "; // 在前面、中間、后面都有空格,多個空格
System.out.println(s.trim());
}
@Test // 獲取字串某個位置的字符(字串字符陣列),可以通過下標去獲取某個位置的字符
public void charAt() {
String s = "特斯拉剎車不靈";
// 獲取字串第一個字符
char c1 = s.charAt(0);
System.out.println("第一個字符:" + c1);
// 獲取字串最后一個字符
char c2 = s.charAt(s.length() - 1);
System.out.println("最后一個字符:" + c2);
}
@Test // 獲取當前字串一部分,稱為子串
public void substring() {
String s = "天生我有才";
// 獲取字串:我
System.out.println( s.substring(4, 7) );
// 獲取字串:有才(假定當前字串不變)
System.out.println( s.substring(s.length()-2) ); //一個引數就截取字串到最后
}
@Test //字串轉換大小寫
public void tocase() {
String s = "tonyChan";
//轉大寫
System.out.println( s.toUpperCase() );
//轉小寫
System.out.println( s.toLowerCase() );
//首字母大寫
//獲取首字母charAt,拼接后面部分 substring(1)
//利用字符和空串拼串得到結果字串型別,它有toUpperCase()方法,字符是沒有這個方法的
String str = (s.charAt(0)+"").toUpperCase() + s.substring(1);
System.out.println(str);
}
@Test //indexOf,某個子串所出現位置(下標)從左到右搜索;lastIndexOf,從右往左搜索
public void index() {
String s = "bbbabcdabcabcd";
//搜索abc它的位置,一次indexOf,搜索第一次位置
System.out.println( s.indexOf("abc") );
//搜索abc它的位置,一次lastIndexOf,搜索最后一個位置
System.out.println( s.lastIndexOf("abc") );
String email = "tony@tedu.cn";
//從上面郵箱地址中拆出用戶名和域名
int pos = email.indexOf("@"); //先記錄下字符的索引的位置
System.out.println("@的位置:" + pos);
//用戶名
System.out.println( email.substring(0,pos) );
//域名
System.out.println( email.substring(pos+1) );
}
@Test //前綴和后綴判斷
public void with() {
String filename = "bigdata-trainingday05.doc";
//判定是否某個前綴開頭
String prefix = "cgb-";
System.out.println( filename.startsWith(prefix) );
//判斷是否某個后綴結束
String suffix = ".md";
System.out.println( filename.endsWith(suffix) );
//判斷檔案是否為doc檔案檔案
if( filename.endsWith(".doc") ) {
System.out.println("這是一個word檔案檔案");
}else {
System.out.println("這不是一個word檔案檔案");
}
}
@Test //替換
public void replace() {
String s = "a.b.c.d.e";
//把字串中的點替換逗號,第一引數舊的內容,第二引數新的內容,替換
System.out.println( s.replace(".", ",") ); //對的
System.out.println( s.replaceAll(".", ",")); //變成都是.?第一引數語法滿足正則運算式 regex
//如果引數是正則運算式的符號,必須轉義,\自己也被正則征用,加\\代表一個轉義字符
//Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
//第一個斜杠代表轉義,第二個斜杠正則里的斜杠,語法必須寫兩個
System.out.println( s.replaceAll("\\.", ","));
}
@Test //拆串,根據字串中分隔符,把現有字串變成字串陣列,有幾個分隔符,分隔符數量+1個陣列元素
public void split() {
String email = "tony@tedu.cn"; //郵箱地址,分隔符@
String[] emails = email.split("@"); //拆出陣列
//列印陣列
System.out.println( Arrays.toString(emails) ); //利用工具型別的方法把陣列轉換成字串,列印
//由一個陣列獲取每個值
String score = "100,99,60"; //doc,docx,ppt,pptx,execl,excelx,mp4,avi
String[] scores = score.split(",");
//另外一種方式:for回圈,遍歷陣列
for(int i=0; i< scores.length; i++) {
//每次回圈i的值在變,代表當前陣列的索引
System.out.println( scores[i] );
}
}
}
案例
1、姓名被*替代
王麗瑩變成 王*,陳強變成 陳*
package cn.tedu.api;
import org.junit.Test;
//把多個名字轉成 姓*的形式
public class TestName {
@Test
public void names() {
String name = "王麗瑩、陳強、李琦、張三";
//1、把字串拆串 split
String[] names = name.split("、");
//2、遍歷陣列獲取陣列的每個元素 for
for( int i=0; i< names.length; i++ ) {
//3、獲取首字母拼接*,列印
String str = names[i].charAt(0) + "*";
System.out.println(str);
}
}
}
決議
package cn.tedu.api;
import org.junit.Test;
/*
* 決議:
* 規則:18位,6位地區,8位出生年月,3順序碼,奇數男,偶數女,1校驗碼
*/
public class TestCardNo {
@Test
public void cardNo() {
String cardNo = "610113198009082113"; //身號
//地址碼
System.out.println("地址碼:" + cardNo.substring(0, 6));
//出生年月:xxxx年x月x日
String s = cardNo.substring(6, 14);
String year = s.substring(0, 4);
String month = s.substring(4,6);
int m = Integer.parseInt(month); //api 把字串型別轉換int整型
System.out.println("月份:"+m);
String day = s.substring(6,8);
int d = Integer.parseInt(day); //api 把字串型別轉換int型別
//小技巧:整數:007,列印7;把字串轉換整數09字串整數9,然后字串拼接
System.out.println("出生年月:"+year + "年"+ m+"月"+d+"日");
//性別,3位校驗位,最后一位為奇數男,為偶數女
//思路,先拿到校驗位的最后一位,轉換整數,對2取余,余數為1男,余數為0女
String last = cardNo.substring( cardNo.length()-2, cardNo.length()-1 ); //倒數第二位字串
System.out.println("校驗位最后一位:" + last);
int sex = Integer.parseInt(last);
if( sex % 2 ==1) {
System.out.println("性別:男");
}else {
System.out.println("性別:女");
}
}
}
總結:
java API (jdk,java se)應用程式介面,利用它程式員就無需寫底層實作,直接使用它就可以操作計算機相關資源,處理型別轉換,
開發中使用最頻繁字串 String,專門對字串方法進行研究學習,這些api必須會,熟知作用,引數,回傳值,達到效果,
1)轉義字符:輸入字符被征用 \t 代表tab鍵,\n 代表回車,本身tab鍵和回車不可見字符,利用這種方式表達這種不可能字符處理,它標準ascii,查詢手冊,
2)字串兩種連接方式:+,concat
“abc”.concat(“123”);
2)format格式化方式特點,占位符 %s
format(“abc”, String … args)
第二引數叫做變長引數,代表多個引數,1~n,前面字串形式無需用+拼接,直接就是一個字串
3)length 長度
不同物件型別,同樣是length,有的是方法length(),有的是屬性length,
以前字符集,英文占1個位置,漢字占2個位置,現今字符集統一,英文和漢字都只占1個位置,
4)trim 去掉字串兩邊空格,支持多個
5)charAt 獲取某個下標的字符,String本質字符陣列 value[]
6)toUpperCase 轉大寫、toLowerCase 轉小寫
7)substring 截取字串
兩種寫法:
a. 一個引數,beginIndex 起始位置,到最后結束(截取尾巴)
b. 兩個引數,beginIndex,endIndex 起始位置,結束位置(截取開頭、中間)
8) indexOf和lastIndexOf()
獲取某個字符的位置,有了這個配置配合substring截串
9)startsWith和endsWith
前綴 prefix,后綴 suffix,判斷
10)replace 替換(推薦)
replaceAll (替換多個)和replaceFirst(替換一個)引數字串,不是普通字串,正則運算式 regex
方便匹配,轉義,.被征用,用\.使用
11)split 把字串,里面有特殊分隔符,按分隔符拆分成陣列,可以對陣列每個元素進行處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281245.html
標籤:java
上一篇:資料結構:哈希表
下一篇:IDEA史上最全的各種快捷鍵
