<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
字串內部包含一個字元陣列,String 可以和 char[] 相互轉換.
public static void main(String[] args) { char[] val = {'a','b','c','d','e'}; String str = new String(val); System.out.println(str); }
public static void main(String[] args) { char[] val = {'a','b','c','d','e'}; String str = new String(val,1,3);//第一個引數是開始變得字元下標 第二個引數是要變的字元個數 System.out.println(str); }
public static void main(String[] args) { String str = "hello" ; System.out.println(str.charAt(0)); // 下標從 0 開始 }
public static void main(String[] args) { String str = "hello" ; System.out.println(str.charAt(10)); }
public static void main(String[] args) { String str = "helloworld" ; char[] chars =str.toCharArray();//把str指向的字串物件變為字元陣列 System.out.println(Arrays.toString(chars)); }
程式碼範例: 給定字串一個字串, 判斷其是否全部由數位所組成.
思路: 將字串變為字元陣列而後判斷每一位字元是否是" 0 “~”‘9’"之間的內容,如果是則為數位.
public static boolean isNumber(String str) { char[] array = str.toCharArray(); for (int i = 0; i < array.length; i++) { if (array[i] < '0' || array[i] > '9') { return false; } } return true; } public static void main(String[] args) { String str = "12a34567"; System.out.println(isNumber(str)); }
位元組常用於資料傳輸以及編碼轉換的處理之中,String 也能方便的和 byte[] 相互轉換.
public static void main(String[] args) { byte[] bytes = {97,98,99,100}; String str = new String(bytes); System.out.println(str); }
public static void main(String[] args) { byte[] bytes = {97,98,99,100,101,102}; String str = new String(bytes,1,4);//第一個引數是開始變得字元下標 第二個引數是要變的字元個數 System.out.println(str); }
public static void main(String[] args) { String str = "abcd"; byte[] bytes = str.getBytes(); System.out.println(Arrays.toString(bytes)); }
public static void main(String[] args) throws UnsupportedEncodingException { String str = "abcd"; byte[] bytes = str.getBytes("GBK"); System.out.println(Arrays.toString(bytes)); }
那麼何時使用 byte[], 何時使用 char[] 呢?
回憶概念: 文字資料 vs 二進位制資料
一個簡單粗暴的區分方式就是用記事本開啟能不能看懂裡面的內容.
如果看的懂, 就是文字資料(例如 .java 檔案), 如果看不懂, 就是二進位制資料(例如 .class 檔案).
上面使用過String類提供的equals()方法,該方法本身是可以進行區分大小寫的相等判斷
。除了這個方法之外,String類還提供有如下的比較操作:
程式碼範例: 不區分大小寫比較
String str1 = "hello" ; String str2 = "Hello" ; System.out.println(str1.equals(str2)); // false System.out.println(str1.equalsIgnoreCase(str2)); // true
注意:equalsIgnoreCase是忽略大小寫的意思。
在String類中compareTo()方法是一個非常重要的方法,該方法返回一個整型,該資料會根據大小關係返回三類內容:
- 相等:返回 0.
- 小於:返回內容小於 0.
- 大於:返回內容大於 0。
System.out.println("A".compareTo("a")); // -32 System.out.println("a".compareTo("A")); // 32 System.out.println("A".compareTo("A")); // 0 System.out.println("AB".compareTo("AC")); // -1 System.out.println("劉".compareTo("楊"));
compareTo()是一個可以區分大小關係的方法,是String方法裡是一個非常重要的方法。這裡的返回值就是前面字元對應的數值減去後面的字元所對應的數值。
字串的比較大小規則, 總結成三個字 “字典序” 相當於判定兩個字串在一本詞典的前面還是後面. 先比較第一個字元的大小(根據 unicode 的值來判定), 如果不分勝負, 就依次比較後面的內容
從一個完整的字串之中可以判斷指定內容是否存在,對於查詢方法有如下定義:
程式碼範例: 字串查詢,最好用最方便的就是contains() ——(類似於C語言的strstr)
String str = "helloworld" ; System.out.println(str.contains("world")); // true
該判斷形式是從JDK1.5之後開始追加的,在JDK1.5以前要想實現與之類似的功能,就必須藉助、indexOf()方法完成。
程式碼範例: 使用indexOf()方法進行位置查詢(找到之後返回我們查詢元素的第一個位置)
String str = "helloworld" ; System.out.println(str.indexOf("world")); // 5,w開始的索引 System.out.println(str.indexOf("bit")); // -1,沒有查到 if (str.indexOf("hello") != -1) { System.out.println("可以查到指定字串!"); }
現在基本都是用contains()方法完成。
使用indexOf()需要注意的是,如果內容重複,它只能返回查詢的第一個位置
程式碼範例: 使用indexOf()的注意點
String str = "helloworld" ; System.out.println(str.indexOf("l")); // 2 System.out.println(str.indexOf("l",5)); // 8 System.out.println(str.lastIndexOf("l")); // 8
在進行查詢的時候往往會判斷開頭或結尾。
程式碼範例: 判斷開頭或結尾
String str = "**@@helloworld!!" ; System.out.println(str.startsWith("**")); // true System.out.println(str.startsWith("@@",2)); // ture System.out.println(str.endsWith("!!")); // true
使用一個指定的新的字串替換掉已有的字串資料,可用的方法如下:
程式碼範例: 字串的替換處理
String str = "helloworld" ; System.out.println(str.replaceAll("l", "_")); System.out.println(str.replaceFirst("l", "_"));
注意事項: 由於字串是不可變物件 , 替換不修改當前字串, 而是產生一個新的字串.
可以將一個完整的字串按照指定的分隔符劃分為若干個子字串。
可用方法如下:
程式碼範例: 實現字串的拆分處理
String str = "hello world hello bit" ; String[] result = str.split(" ") ; // 按照空格拆分 for(String s: result) { System.out.println(s); }
程式碼範例: 字串的部分拆分
String str = "hello world hello bit" ; String[] result = str.split(" ",2) ; for(String s: result) { System.out.println(s); }
拆分是特別常用的操作. 一定要重點掌握. 另外有些特殊字元作為分割符可能無法正確切分, 需要加上跳脫.
程式碼範例: 拆分IP地址
String str = "192.168.1.1" ; String[] result = str.split("\.") ; for(String s: result) { System.out.println(s); }
注意事項:
程式碼範例: 多次拆分
String str = "name=zhangsan&age=18" ; String[] result = str.split("&") ; for (int i = 0; i < result.length; i++) { String[] temp = result[i].split("=") ; System.out.println(temp[0]+" = "+temp[1]); }
這種程式碼在以後的開發之中會經常出現
從一個完整的字串之中擷取出部分內容。可用方法如下:
程式碼範例: 觀察字串擷取
String str = "helloworld" ; System.out.println(str.substring(5));//從第5個字元位置的位置開始擷取到結尾 System.out.println(str.substring(0, 5));//從0位置開始擷取到第5位置的元素
注意事項:
程式碼範例: 觀察trim()方法的使用
String str = " hello world " ; System.out.println("["+str+"]"); System.out.println("["+str.trim()+"]");
trim 會去掉字串開頭和結尾的空白字元(空格, 換行, 製表符等).
程式碼範例: 大小寫轉換
String str = " hello%$$%@#$%world 哈哈哈 " ; System.out.println(str.toUpperCase()); System.out.println(str.toLowerCase());
這兩個函數只轉換字母。
程式碼範例: 字串length() —— 取得字串長度
String str = " hello%$$%@#$%world 哈哈哈 " ; System.out.println(str.length());
注意:陣列長度使用陣列名稱.length屬性,而String中使用的是length()方法
程式碼範例: 觀察isEmpty()方法 —— 判斷是否為空字串(不是null,而是長度為0)
System.out.println("hello".isEmpty()); System.out.println("".isEmpty()); System.out.println(new String().isEmpty());
String類並沒有提供首字母大寫操作,需要自己實現.
程式碼範例: 首字母大寫
public static void main(String[] args) { System.out.println(fistUpper("yuisama")); System.out.println(fistUpper("")); System.out.println(fistUpper("a")); } public static String fistUpper(String str) { if ("".equals(str)||str==null) { return str ; } if (str.length()>1) { return str.substring(0, 1).toUpperCase()+str.substring(1) ; } return str.toUpperCase() ; }
首先來回顧下String類的特點:
任何的字串常數都是String物件,而且String的常數一旦宣告不可改變,如果改變物件內容,改變的是其參照的指向而已。
通常來講String的操作比較簡單,但是由於String的不可更改特性,為了方便字串的修改,提供了其兩大類。
這兩大類大部分功能是相同的,我們主要介紹
StringBuffer
在String中使用"+"來進行字串連線,但是這個操作在
StringBuffer
類中需要更改為append()方法:
public synchronized StringBuffer append(各種資料型別 b)
我們來看這類的繼承結構:
public synchronized StringBuffer reverse()
程式碼範例: 字串反轉(reverse)
StringBuffer sb = new StringBuffer("helloworld"); System.out.println(sb.reverse());
刪除指定範圍的資料(delete):
public synchronized StringBuffer delete(int start, int end)
程式碼範例: 觀察刪除操作( delete( , ) )
StringBuffer sb = new StringBuffer("helloworld"); System.out.println(sb.delete(5, 10));
插入資料(insert)
public synchronized StringBuffer insert(int offset, 各種資料型別 b)
程式碼範例: 觀察插入操作( insert( , ) )
StringBuffer sb = new StringBuffer("helloworld"); System.out.println(sb.delete(5, 10).insert(0, "你好"));
小結
字串操作是我們以後工作中非常常用的操作. 使用起來都非常簡單方便, 一定要使用熟練.
補充
1.什麼是雜湊表:資料結構–>描述和組織資料的一種方式。
12 45 2 7 15 92
問題:如何去查詢到一個關鍵字
1、順序查詢:通過關鍵字的一個一個的比較,才能找到O(n)
2、排序+二分查詢
雜湊表時間效率非常高 效率可以高到O(1)。
2.陣列的賦值 只有1次機會 就是在定義的時候
array不可以直接進行二次賦值,如下圖所示:
我們在new了一個新的array後,我們就可以對array進行二次賦值了
但是我們的陣列array用了final修飾後就不可以改變了
若array被final修飾後,還想修改array的值,那我們便需要通過反射修改array
到此這篇關於Java-String類最全彙總(下篇)的文章就介紹到這了,其他的內容(上篇)請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45