字串

程式語言通常以「 " 」前後夾住的字元就是字串,可以直接拿來顯示或是比較之用。但 Java 程式語言中的字串卻是一種比較特別的資料型態,它是一個物件類別卻又屬於基本型態。能像基本資料型態直接用「 = 」賦值,也可以使用「new String( )」來產生物件。String在使用上十分普遍,任何物件能都能以String輸出。另外 Java 的 String 是以utf8格式存放的,所以在計算字元時,一個中文字跟一個英文字都是算1個字,這點是跟其它程式語言不太一樣的。



public class CH012 {

 public static void main(String args[]) throws IOException {
  
  String str1="hello";
  String str2=new String("Kitty!");
  
  System.out.println(str1+" "+str2);
  
 }
 
}


字元與字串

前面瞭解多個字元合併成為字串,例如"Kitty"字串是由'K'、'i'、't'、't'、'y'五個字元所組成的字元陣列。可用用「length」得到字元數量,用「substring」、「charAt」、「index等方法找出固定位置。
public class CH013 {

 public static void main(String args[]) {

  String str = "hello Kitty!";
  
  System.out.println(str.length()); //字串中的字元數量
  System.out.println(str.charAt(3));//字串中第4個字元
  System.out.println(str.substring(4, 7));//字串中第5到7個字元
  System.out.println(str.indexOf("o"));    //字串中的「o」在第幾個位置

 }

}


字元與字串的關係密切,但字元不同於字串。


字串搜尋與取代

「replace(要被取代的字串,要取代的字串)」取代全部找到的「要被取代字串」, 「replaceFirst (要被取代的字串,要取代的字串)」只取代第一個找到的「要被取代字串」。 其中replaceAll函數可以使用正規表示式來做整批有規則性的取代
public class CH014 {

 public static void main(String args[]) {

  String str = "hello Kitty!";
 
  System.out.println(str.replace("Kitty!", "小梅子")); //置換的結果不會改變原字串
  System.out.println(str);//看看是不是真的
  
  str=str.replace("Kitty!", "everyone"); //要明確賦予新值
  System.out.println(str);//才會變成新字串

 }

}

方法名稱後方的小括號代表函數,會有單獨章節介紹。


字串連結

字串可以用「 + 」連結,讓多個字串合併成一個字串。 也可以隨機與「 "  "」雙引號夾住的即時字串連結。 任何類型資料與字串相加後,結果都會變成字串。對於初學者,字串內容的「數字」,並不代表為「數值」。數字相加是把數字連在一起顯示,不會是預期的數值相加結果。
public class CH015 {

 public static void main(String args[]) {
  
  String s1="1";
  String s2="2";
  int    s3=3;
  
  System.out.println( s1 + s2 + s3 + 3 +3 );
  
 }
 
}


字串可以用「 + 」連結,讓多個字串合併成一個字串。
也可以隨機與「 " "」雙引號夾住的即時字串連結。
任何類型資料與字串相加後,結果都會變成字串。


字串比較

字串是一種特別的資料型態,它是一個物件類別卻又屬於基本型態。能像基本資料型態直接用「 = 」賦值,也可以用建立物件的方式「 new 」來產生。 「 equals 」是所有物件提供的基本方法,可以比較二個物件的值是否相同,「 = 」則是比較物件(實體、記憶體空間)是否相同。
public class CH016 {
 
 public static void main(String args[]) {
  
  String s4 = new String("restful") ;
  String s5 = new String("restful") ;
  String s6 = new String("peaceful") ;
  String s7 = s4 ;
  String s8= "restful" ;
  String s9= "restful" ;

  System.out.println(s4.equals(s5)) ;
  System.out.println(s4.equals(s6)) ;
  System.out.println(s4 == s5) ;
  System.out.println(s4 == s7) ;
  System.out.println(s4 == s8) ;
  System.out.println(s8 == s9) ; 
  
 }

}


System.out.println(s4.equals(s5));//s4和s5所帶的值相同---true
System.out.println(s4.equals(s6));//s4和s6所帶的值不相同----false
System.out.println(s4 == s5); //s4和s5各new了不同的記憶體空間----false
System.out.println(s4 == s7); //因為把s7指向了和s4所指向的同一個空間----true
System.out.println(s4 == s8); //因為s4 new了一個新空間,而s8則在字串池中---false
System.out.println(s8 == s9); //s8和s9都在字串池中,為節省記憶體,會指向同一個記憶體空間-----true


字串轉數值

鍵盤、滑鼠、網路線、USB線,各種I/O裝置傳入值都是串流。通常都需要讀取串流解析為字串,文字資料必需變成為字串才能進行各項後續處理。而字串又要轉換為不同的資料型態,才能進行各項運算。各種型態的數值都有轉換方式,Integer.ParseInt(String)、Float.ParseFloat等。


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CH0506 {

 public static void main(String args[]) throws IOException {

  BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

  System.out.print("請輸入一個數字: ");

  int sum = Integer.parseInt(buf.readLine());//Integer.ParseInt(String)方法將字串轉為int數字型態

  System.out.print("請再輸入一個數字: ");

  //System.out.println(sum+"+" + buf.readLine()+" = "+(sum + Integer.parseInt(buf.readLine())));
  
  System.out.println("加總為"+(sum + Integer.parseInt(buf.readLine())));

 }

}

字串轉型可能會發生預期外的事件,例如使用者輸入的不是數字鍵、數字太大太小、空白或沒輸入等X事。雖然Java有完善的錯誤處理機制,不過那是之後的事。現在我們先利用IDE提供的throws自動丟出例外throws IOException來敷衍編譯器。因為編譯器認定有輸入輸出的動作,就要有錯誤處理機制。放throws 的意思是交給呼叫的類別來處理,main是主類別當main用throws出錯時仍然會使程式中斷。


數值轉字串

任何東西都能轉字串,物件、數值都可以轉為字串。轉字串的意義不大,數值與字串用「+」連接就算不轉字串也會被溶合為字串,但是總有用到需要字串的時候。物件轉字串有基本方法toString(),而數值轉字串要用String.values(數值)。
public class CH0507 {

 public static void main(String args[]) {

  int num=1;
  
  String str=String.valueOf(num);

  System.out.println(str);
  
  Float n=0.1f;
  
  str=n.toString();
  
  System.out.println(str);

 }

}

數值或物件轉字串不會發生預期外的事件,無論再離譜的東西都能轉成字串。連空值也會轉出「null」4個字,所以不需要錯誤處理機制。


String str=String.valueOf(100);
利用文字輸入介面或視窗介面輸入多個文字或數字,將排序結果顯示於介面中。
請參考資料型態中的字串轉換方法

下一步 條件式流程控制

沒有留言:

張貼留言