來說說Java中String 類的那些事情
今天正好學校那邊的任務不多,我就打算把Stirng 的有關知識點都總結在一起了,這樣有利於知識的系統性,要不然學多了就會越來越雜,最主要的是總會忘記,記憶的時間太短了,通過這種方式,把它歸納在一起,寫一下部落格,這樣我認為會好一點,也可以幫助有需要的人,一舉兩得,嘻嘻,廢話不多說繼續干,奧里給。
首先咱們從最開始的源頭來說,剛開始接觸JAVA的時候,我們學過java的基本的數據類型
- [ 1 ] 基本類型
-
數值類型
-
boolean
- [ 2 ] 引用類型
引用類型-->引用
那麼好,我們就先說說引用數據類型,先了解一下,JAVA一個有四種引用類型分別是類類型,介面類型,數組類型,枚舉類型
1.String 可以通過new和構造方法來創建一個對象,用s來引用它(也就是相當於把asdf這個字元串賦值給s
String s = new String("asdf");
那麼什麼是引用呢?打個比方:就好比是你的學號,那麼對象就是你,那就需要你(對象)來找到的學號,那怎嗎可以找到你的學號呢?就需要學號來引用你(對象),那麼你就可以知道你的學號是什麼了,這個比方就可以解釋什麼是引用了
2.String(字元串)可以和數字相互轉換
- [1] 字元串轉換成數字(三種)(前提是數字型)
String a = "123";
int num1 = Integer.parselnt(a);
Integer num2 = Integer.valuOf(a);
Integer num3 = new Integer(a);
- [2] 數字轉換成字元串
int a = 10;
String s = Integer.toString(a);
String s1 = String.valueOf(a);
String s2 = " " + a;
3.字元串中String類和StringBuffer類(StringBuilder類)
- [1] String 對象是不可變的,他的內容是不可以變得
String s = "JAVA";
Stystem.out.println("s= " + s);
S = "Html";
System.out.println("s = " + s);
輸出結果:
s=JAVA
s=Html
新手有的小白一定會好奇,它的值不是改變了嗎,但是為什麼說它是不可的呢?這個第一天語句創建一個內容為JAVA的String對象,第二個是創建一個內容為Html類的對象 並將其引用賦值給s,賦值後第一個對象
仍然存在但是卻不能進行訪問了,因為s現在已經指向了一個新的對象,那麼原來那個對象就會成為他的垃圾記憶體,在莫以特定時刻有JAVA虛擬機回收,如果你要想存放的String可以調整大小的話,而不是通過創建新的記憶體來存放新的對象。
String s = “JAVA”;,執行之後如下:
graph LR
S-->JAVA
String s = “Html”;執行之後如下:
graph LR
S-->JAVA
graph LR
S-->Html
這裡由於我技術水平的問題圖我只能這樣畫但是其實它是指向下一個Html那個的,請大家諒解
- [2] StringBuffer類和Stringbuilder類
StringButter類/StringBuilder類要比Stirng要靈活,他們可以隨意的插入,添加,或者追加新的內容,可以這麼說,StringButter類和Sttringbuilder類基本是相同的,可以視為一致
修改StringBuilder常用的方法:
appand(char[])//追加一個字元數組到構造器中
reverse()//翻轉構造器中的字元
setCharAt(o,’a’)//將構造器中的索引值換做成字元型
我只說了其中的一小部分種的一小部分,也是很常用的,剩下的大家可以查閱API文檔來看噠!
4.String類中to String()方法
- [1] toString()方法在object類中定義的,其返回值是String類型
- [2] 在進行String 類與其他類型的連接操作時,自動調用toString方法,demo如下;
Data now = new DateData();
System.out.println("now= " + now);//相當於下一行程式碼
System.out.println("now="+ now.toString());
在閱讀javadoc時ToString()
是這樣說的 The toString method for class Object return a string consisting of the name of the class of which theobject is an instance, the at-sign character `@’, andthe unsigned hexadecimal representation of the hash code of theobject. In other words, this method returns a string equal to thevalue of:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
它的注釋是這麼說的,翻譯過來大致意思就是:類對象這個方法返回一個字元串,這個字元串是一個實例,@字元和無符號十六進位的表示形式,也就是說此方法返回一個等於值的字元串
因為它是object類已經有的方法m,而所有的類都繼承Object,所以”所有對象都有這個方法」,他就是為了方便輸出,如果輸出的不是String類型的話,系統就會自動調用toString()放法(其實他也就是起到個補充的作用
public class A{
public String toString(){
return"this is A";
}
public static void main(String[] args){
A obj = new A();
System.out.println(obj);
}
輸出結果是:this is A
public class A{
public String getString(){
return"this is A";
}
public static void main(String[] args){
A obj = new A();
System.out.println(obj.getString());
}
輸出結果是:A@279f2327
看到好處了嗎?就是這個toString()方法只要遇到println等一些輸出的方法時,他就會自動調用,不用顯示打出來。
5.String類型
常見的方法我簡單的給你們說道說道,可能只是片面,又沒說到的建議大家多多的去查閱API文檔,差多了自然就記住了,就好比是背單詞似的也是要一點一點地積累的
length()//返回字元串中的字元數
charAt(index)//返回字元串ss中指定位置的字元
tuUpperCase()//返回一個新的字元串,其中所有字母大寫
toLoverCase()返回一個新的字元串,其中所有字母小寫
concat(s1)//將本字元串和s1字元串連接起來返回一個新的字元串
給你們舉個例子具體這些方法是怎麼用的,因為總是有很多剛剛學還沒入門的小夥伴,不會用,就是理論和實踐不能很完全的結合。
String message = "welcome to JAVA!";
System.out.println("The length of " + message + "is"+ message.length());
輸出結果:The length of welcome to JAVA! is 16
這只是程式碼中的一小部分,但卻也是核心地方。
6.String類的靜態format()方法
它和printf很是相似只不過printf是顯示一個格式化字元串,而format()則是返回一個格式化字元串,這個就是二者的區別,這個還是很簡單個,也很好理解我還是繼續說一個例子吧!加深理解。
語法一:format(String format,object….args)
其中format為格式化字元串,args為由格式字元串中由格式說明符引用的參數,參數的數目是可變的,也可以為0.
轉換符 說 明 示 例
%b、%B 格式化為布爾類型 false
%h、%H 格式化為散列碼 A05A5198
%s、%S 格式化為字元串類型 “abc”
%c、%C 格式化為字元類型 ‘w’
%d 格式化為十進位數 26
%0 格式化為八進位整數 12
%x、%X 格式化為十六進位整數 4b 1
%e 格式化為用電腦科學計數法表示的十進位數
1.700000e+01
%a 格式化為帶有效位數和指數的十六進位浮點值 0X1.C000000000001P4
%n 結果為特定於平台的行分隔符
%% 結果為字面值%
Sttring str = String.format("%d",400/2);
String str2 = String.format("b",3>5);
輸出結果:
200
false
語法二:format(Loacate l,String format,Object…args)
該方法可以作為常用的日期和時間的格式轉換符
下面這個表是我在書上看到的,所以記錄了下來,也同時可以為大家作為參考。
表2 常見的日期和時間轉換符
轉換 說明 示 例
%te 一個月中的某一天(1〜31) 12
%tb 指定語言環境的月份簡稱 Jan (英文)、一月(中文)
%tB 指定語言環境的月份全稱 February
(英文)、二月(中文)
%tA 指定語言環境的星期幾全稱 Monday (英文)、星期一(中文)
%ta 指定語言環境的星期幾簡稱 Mon (英文)、星期一(中文)
%tc 包括全部日期和時間資訊 星期三 十月 25 13:37:22 CST 2008
%tY 4位年份 2008
%tj 一年中的第幾天(001〜366) 060
%tm 月份 05
%td 一個月中的第幾天(01〜31) 07
%ty 兩位年份 08
public static void main(String[] args){
Date date new Date();//定義Data類對象
Locale dorm = Locale.Us;
String month = String.format(form,"%tY",date);//將當前年份初始格式化String data = String.format(form."%td",date);//將當前日期s初始化
System.out.println("今年是:" + year +);
System.out.println("今天是:" + date + "號");
}
運行結果:
今年是:2022年
現在是: April
今天是:17號