Java字符串
String對象是不可變的。String類中每一個看起來會修改String值的方法,實際上都是創建了一個全新的對象,以包含修改後的字符串。而最初的String對象則絲毫未動。
import java.util.*;
public class Immutable{
public static String upcase(String s){
return s.toUpperCase();
}
public static void main(String[] args){
String q="helloworld";
System.out.println(q);
String qq=upcase(q);
System.out.println(qq);
System.out.println(q);
}
}
其實,每當String對象作爲方法的參數時,都會複製一份引用,而該引用所指的對象其實一直待在單一的物理位置上,從未動過。
不可變性會帶來一定的效率問題。爲String對象重載+操作符就是一個例子。重載的意思是:一個操作符應用於特定的類時,被賦予了特殊的意義。用於String的+,+=是Java中僅有的兩個重載過的操作符,而Java並不允許程序員重載任何操作符。
import java.util.*;
public class Concatenation{
public static void main(String[] args){
String mango="mango";
String s=mango+"abc"+"xyz"+47;
System.out.println(s);
}
}
String上的操作
length():String中字符的個數
charAt():取得String上該索引位置上的char
toCharArray():生成一個char[],包含所有的String字符
equals()/equalsIgnoreCase():比較兩個String的內容是否相同
compareTo():按字典順序比較字符串String的內容,比較結果爲負數,零或者正數
contains():如果String對象包含參數內容,則返回true
startsWith():返回boolean結果,表明String是否以此參數起始
endsWith():返回boolean結果,表明String是否以此參數結尾
indexOf()/lastIndexOf():如果String對象並不包含此參數,就返回-1,否則返回此參數在String中的起始索引。
lastIndexOf()是從後往前搜索的。
substring():返回一個新的String,以包含參數指定的子字符串
concat():返回一個新的String,內容爲原始String連接上參數String
replace():返回替換字符後的新String對象
toLowerCase()/toUpperCase():將字符串的大小寫改變後,返回一個新String對象
trim():將String對象的兩端空白字符刪除後,返回一個新的String對象
valueOf():返回一個表示參數內容的String
String格式化輸出
System.out.printf(),System.out.format()使得控制輸出的代碼更加簡單。
import java.util.*;
public class Receipt{
private double total=0;
private Formatter f=new Formatter(System.out);
public void printTitle(){
f.format("%-15s %5s %10s\n","Item","Qty","Price");
f.format("%-15s %5s %10s\n","----","---","-----");
}
public void print(String name,int qty,double price){
f.format("%-15.15s %5d %10.2f\n",name,qty,price);
total+=price;
}
public void printTotal(){
f.format("%-15s %5s %10.2f\n","Tax","",total*0.06);
f.format("%-15s %5s %10s\n","","","-----");
f.format("%-15s %5s %10.2f\n","Total","",total*1.06);
}
public static void main(String[] args){
Receipt receipt=new Receipt();
receipt.printTitle();
receipt.print("afafaa",4,4.25);
receipt.print("ryturty",3,5.1);
receipt.print("hgjd",1,14.29);
receipt.printTotal();
}
}