字串基礎


由字元組成的文字符號稱為字串,例如"Hello"字串是由'H'、'e'、'l'、'l'、'o'五個字元組成,在某些程式語言中,字串是以字元陣列的方式存在,然而在Java中,字串是java.lang.String實例,用來包裹字元陣列,你可以用""包括一串字元來建立字串:

String name = "justin";                    // 建立String實例
System.out.println(name);                  // 顯示justin
System.out.println(name.length());       // 顯示長度為6
System.out.println(name.charAt(0));      // 顯示第一個字元j
System.out.println(name.toUpperCase()); // 顯示JUSTIN

由於字串在Java中是物件,所以自然也就擁有一些可操作的方法,像是這個程式片段中所示範的,可以使用length()取得字串長度,使用charAt()指定取得字串中某個字元,索引從0開始,使用toUpperCase()將原本小寫的字串內容轉為大寫的字串內容。

如果你已經有一個char[]陣列,也可以使用new來建構String實例。例如:

char[] cs = {'j', 'u', 's', 't', 'i', 'n'};
String name = new String(cs);

如果必要,也可以使用StringtoCharArray()方法,以將字串以char[]陣列傳回:

char[] cs2 = name.toCharArray();

在Java中可以使用+運算來串接字串。例如在JDK5之前並沒有System.out.printf()方法,所以常常看到文字示範簡單的輸出時會這麼撰寫:

String name = "Justin";
System.out.println("你的名字是:" + name);

如果要將輸字串轉換為整數、浮點數等基本型態,可以使用下表各類別提供的剖析方法:

方法
說明
Byte.parseByte(number) 將number剖析為byte整數
Short.parseShort(number) 將number為short整數
Integer.parseInt(number) 將number為int整數
Long.parseLong(number) 將number為long整數
Float.parseFloat(number) 將number為float浮點數
Double.parseDouble(number) 將number剖析為double浮點數

在上表中,假設number參考至String實例,而該字串實際上是代表數字,例如"123""3.14"這樣的數字。如果無法剖析傳入的String實例,則會拋出NumberFormatException的錯誤。

來個綜合練習,下面這個範例可以讓使用者輸入整數,輸入0後會計算所有整數總合並顯示:

package cc.openhome;

import java.util.Scanner;

public class Sum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long sum = 0;
        long number = 0;
        do {
            System.out.print("輸入數字:");
            number = Long.parseLong(scanner.nextLine());
            sum += number;
        } while(number != 0);
        System.out.println("總合:" + sum);
    }
}

一個執行結果如下:

輸入數字:10
輸入數字:20
輸入數字:30
輸入數字:0
總合:60

在認識陣列與字串,可以來看看程式進入點main()中的String[] args了,在啟動JVM並指定執行類別時,可以一併指定命令列引數(Command line arguments)。例如:

 > java cc.openhome.Average 1 2 3 4

上面這個指令代表啟動JVM並執行cc.openhome.Average類別,而Average類別會接受1、2、3、4這四個引數,這四個引數會收集 為String陣列,由main()中的args參考。實際來看個應用,底下這個範例可讓使用者命令列引數提供整數,計算出所有整數平均:

package cc.openhome;

public class Average {
    public static void main(String[] args) {
        long sum = 0;
        for(String arg : args) {
            sum += Long.parseLong(arg);
        }
        System.out.println("平均:" + (float) sum / args.length);
    }
}