64
National Taiwan University Department of Computer Science and Information Engineering Simple Data Objects Lecturer 楊楊楊

Simple Data Objects

  • Upload
    bendek

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

Simple Data Objects. Lecturer :楊昌樺. Outline. 數字物件( Number ) 數學物件( Math ) 陣列物件( Array ) Your Turn 字元( Character ) 字串( String ) 字串緩衝區( StringBuffer ) Your Turn. 數字( Number ). 數字基本形態與數字物件的不同. 用上一堂的課的語法創造物件. int x = 3;. Integer x = new Integer(3);. x. 0 x5678. 0 x1234. x. 3. - PowerPoint PPT Presentation

Citation preview

Page 1: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

Simple Data Objects

Lecturer :楊昌樺

Page 2: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

Outline

數字物件( Number )數學物件( Math )陣列物件( Array )Your Turn

字元( Character )字串( String )字串緩衝區( StringBuffer )Your Turn

Page 3: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)數字基本形態與數字物件的不同

int x = 3;

3x

x = 3; 缺少操作此資料的函數 / 方法

Integer x = new Integer(3);

0x5678x

x->Integer(3); 資料與方法同在,方便

0x1234

3toString()

0x5678

用上一堂的課的語法創造物件

Page 4: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)基本型態類別架構

Page 5: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)基本型態類別

Number (java.lang)

• 所有 數字物件 之父類別Byte, Short, Integer, Long (java.lang)

• 對應 byte, short, int, long 等 Primitive Type

Float, Double (java.lang)

• 對應 float, double 等 Primitive Type

BigInteger, BigDecimal (java.math)

• 允許程式師儲存 Primitive Type 無法表示的數值長度及精確度

Page 6: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)基本型態類別

為了完整對應所有的 Primitive Type ,下列三者基本型態類別被創造出來,但不繼承 java.lang.Number

• Boolean (java.lang) boolean

• Character (java.lang) char

• Void (java.lang) void

Page 7: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Integer / Long 常用方法 (比較)

int compareTo(Integer obj);int compareTo(Long obj);

• 比較兩個物件的內容,傳回值是整數, 0 表示相等, < 0 表示參數物件比較大, > 0 表示參數物件比較小

boolean equals(Object obj);• 比較兩個物件是否相等

範例Integer i1 = new Integer(3);Integer i2 = new Integer(4);i1.compareTo(i2);i1.equals(i2);

Page 8: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Example: NumberDemo.java

Float floatOne = new Float(14.78f - 13.78f);

Float floatTwo = Float.valueOf("1.0");

Double doubleOne = new Double(1.0);

Page 9: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Integer / Long 常用方法 ( 數字轉字串 )

String toString();

static String toBinaryString(int i);static String toBinaryString(long l);

static String toOctalString(int i);static String toOctalString(long l);

static String toHexString(int i);static String toHexString(long l);

Page 10: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Example: NumberDemo.java

Integer i = new Integer(100);

System.out.println("Decimal of 100: " + i.toString());System.out.println("Hexidecimal of 100: " + Integer.toHexString(i.intValue()));System.out.println("Octal of 100: " + Integer.toOctalString(i.intValue()));System.out.println("Binary of 100: " + Integer.toBinaryString(i.intValue()));

Page 11: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Float / Double 常用屬性

MAX_VALUE• 傳回兩者的極大值

MIN_VALUE• 傳回兩者的極小值

POSITIVE_INFINITY• 正無限大。 1.0 / 0.0 會得到此值

NEGATIVE_INFINITY• 負無限大。 -1.0 / 0.0 會得此值

NaN (Not a Number)• 非數字。可能為 0.0 / 0.0 的結果或虛數 的運算結果

Page 12: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Float / Double 常用方法( methods )

boolean isInfinite();• 如果是 POSITIVE_INFINITY 或 NEGATIVE_INFINITY 則傳回

true

boolean isNaN();• 如果是 NaN ,則傳回 true

不用擔心 ArithmeticException 之問題

Page 13: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Example: NumberDemo.java

Float f1 = new Float(1.0/0.0);Float f2 = new Float(-1.0/0.0);Float f3 = new Float(0.0/0.0);

System.out.println("The result of 1.0 / 0.0: " + f1.toString());System.out.println("The result of -1.0 / 0.0: " + f2.toString());System.out.println("The result of 0.0 / 0.0: " + f3.toString());

Page 14: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)字串轉成數字

在數字類別中,各自提供一個 valueOf() 的 class method 來將字串轉成該類別的物件例如: NumberDemo.java

字串轉成數字int Integer.parseInt(String)

long Long.parseLong(String)

double Double.parseDouble(String)

float Float.parseFloat(String)

Page 15: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數字( Number)Example: NumberDemo.java

String str1 = "17.5";String str2 = "9.8";String str3 = "7.8";float a = Float.valueOf(str1).floatValue(); float b = Float.valueOf(str2).floatValue();float c = Float.parseFloat(str3);

System.out.println("a + b = " + (a+b));System.out.println("c = " + c);

Page 16: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數學(Math)計算亂數、最大和最小值

方法 說明

int max(int, int)

long max(long, long)

double max(double, double)

float max(float, float)

傳回 2 個 int, long, double, float 參數中最大值

int min(int, int)

long min(long, long)

double min(double, double)

float min(float, float)

傳回 2 個 int, long, double, float 參數中最小值

double random()

float random()

傳回亂數值,範圍為 0.0 ~ 1.0

int round(double)

long round(double)

將 double 參數值四捨五入後傳回整數值

Page 17: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數學(Math)Example: MathMaxMin.java

System.out.println(" 亂數 random(): "+Math.random());

// 0-19 的亂數int num = (int)(Math.random()*20);System.out.println("0-20 亂數 : " + num);

// 1-500 的亂數num = (int)(Math.random()*500 + 1);System.out.println("1-500 亂數 : " + num);

Page 18: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

數學(Math)Math Class

與數字有相關的類別,其提供了一般的數學運算如:計算三角函數,計算數字的 N 次方Math 類別中的 methods 都是 class methods ,所以在呼叫時,直接使用類別名稱呼叫,如: Math.round(34.87)

提供眾多的數學運算,詳細請看 Java API

Example: MathDemo.java

Page 19: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)定義:

一群相同資料型態變數的資料結構一個變數 : int x;

一個陣列 : int x[] = new int[5];

其實我們一直在用陣列• String[] args; // 一個字串陣列

記憶體中的差異

x[0] x[1] x[2] x[3] x[4]

int x int x[5]

Page 20: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)陣列 Array

陣列為一種 Reference 資料型態,是可以儲存多個同一種資料的結構,在宣告的同時必須指定長度且不可再改變元素:陣列中儲存的資料,可藉由索引值( index )存取其值,索引值由 0 開始

因為它不屬於 “基本型態” (Primitive) ,故宣告之後 Java 並不會自動為該變數配置記憶體,您必須自行用 new 指令後才能使用。

Page 21: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)陣列宣告

語法: DataType[] arrayName;例: int[] anArray;

String[] anArrayOfStrings;

建立陣列(使用 new 運算子)語法: arrayName = new DataType[arraySize];

例: anArray = new int[10]; String[] anArrayOfStrings = new String[10];

存取陣列元素語法: arrayName[index]

例: anArray[0] = 3;anArrayOfStrings[1] = “We are studying Java!!”;

Page 22: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)設定陣列初值

一個一個指定如: anArray[1] = 1

迴圈,如: for(int i = 0; i < anArray.length; i++)

{anArray[i] = i;

}在建立時給定初值:

• DataType[] arrayName = {val01, val02, val03, …};例如

• String[] Month = {"January", "February", "March", "April", "May","June", "July", "August", "September", "October", "November", "December"};

Page 23: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)取得陣列長度

語法: arrayName.length注意:不用在 length 後加上小括弧,因為此處的 length 並不是 method ,而是陣列的一種屬性。和 String 類別中的 length() 並不同。可以用一個陣列的長度來控制迴圈

如: for(int i = 0; i < anArray.length; i++) {

… }

或是for(int i = anArray.length – 1; i >= 0; i--)

{…

}

Page 24: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)Example: ArrayDemo.java

// 宣告一個 int 的陣列int[] anArray; // 用 new 來產生一個有 10 個 int 空間的陣列anArray = new int[10];

// 依序將陣列給於初值且印出來for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " ");}

Page 25: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)物件陣列

陣列可以存放 reference 型態(物件)和 primitive 型態(基本型態)的資料

例如:String[] anArray ={“One”, “Two”, “Three”};

而此時 anArray[0], anArray[1], anArray[2] 都是一個 String 物件,都具有物件所屬的方法跟屬性

如:anArray[0].toUpperCase()

Example: ArrayOfStringsDemo.java

Page 26: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)當建立的一個物件陣列時,若未放進初值就去存取的話,會發生錯誤,要養成初始化的好習慣。

Integer[] anArray = new Integer[5];

for(int i = 0; i < anArray.length; i++){

// 錯誤:會有執行時期錯誤System.out.println(anArray[i]);

}

Page 27: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)多維陣列

與一維陣列宣告方式相同,以 [] 數目代表維度例: int[][] xxx = new int[2][3]; //2*3 array

int[][][] xxx = new int[2][2][2]; //2*2*2

多維陣列其實就是陣列中的陣列多維陣列宣告

int[][] x = new int[2][5];

int x[2][5]

x[1][0] x[1][1] x[1][2] x[1][3] x[1][4]

x[0][0] x[0][1] x[0][2] x[0][3] x[0][4]

Page 28: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)多維陣列的初始化

多維陣列也可以如一維陣列般,一邊宣告一邊給初值:

String[][] Month = {{"January", "31"}, {"February", "28"}, {"March", "31"}, {"April", "30"}, {"May", "31"}, {"June", "30"}, {"July", "31"}, {"August", "31"}, {"September", "30"}, {"October", "31"}, {"November", "30"}, {"December", "31"}};

Page 29: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)Example: ArrayOfArraysDemo.java

public class ArrayOfArraysDemo { public static void main (String[] args) { int month = Integer.parseInt(args[0]); String[][] Month ={{"January", "31"},

{“February", "28"}, {"March", "31"}, {"April", "30"}, {"May", "31"}, {"June", "30"}, {"July", "31"}, {"August", "31"}, {"September", "30"}, {"October", "31"}, {"November", "30"}, {"December", "31"}};

System.out.println(Month[month-1][0] + " has " + Month[month-1][1] + " days" ); }}

Page 30: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)複製陣列

使用 System 的類別方法 arraycopy()

arraycopy 需要五個參數public static void arraycopy(Object source, int srcIndex,

Object dest, int destIndex, int length)

Page 31: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

陣列( Array)Example: ArrayCopyDemo.java

char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };char[] copyTo = new char[7];

System.arraycopy(copyFrom, 2, copyTo, 0, 7);

Page 32: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

Your Turn

Basic Practice建立了 a, b, c 均為 3 列 3 行 (3x3) 的矩陣 (Matrix) ,且將 a 和 b 矩陣的加總存放在 c 矩陣裡,並且將結果顯示在螢幕上。a, b 中的數字請用亂數產生(介於 0 ~ 20 之間)

a 0 1 2

0 1 2 3

1 4 5 6

2 7 8 9

b 0 1 2

0 10 11 12

1 13 14 15

2 16 17 18

c 0 1 2

0 11 13 15

1 17 19 21

2 23 25 27

Advanced Practice費氏數列 (Fibonacci)

• 1, 1, 2, 3, 5, 8, 13, …

• 利用迴圈和陣列,求出第 50 項, fib[i]=fib[i-1]+fib[i-2]

Page 33: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

基本型態字元( char)基本型態字元( char )定義:

字元為顯示電腦符號之基本單位char a = ‘a’;

char b = ‘1’;

字元在 Java 與 C++ 中的不同在 C/C++裡, char 是一個 8 位元 的型態在 Java 中, char 是一個 16 位元 的型態

• 全球文字碼 (Unicode) 完整地定義了世界的字元集,已呈現在所有人類語言中找到的字元。它統一了多種字元集,像是拉丁語、希臘語、阿拉伯語、斯拉夫語、希伯來語、日語的片假名,韓語以及其他更多的語言。

Page 34: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

基本型態字元( char)ASCII Table每個字元在電腦裡皆有唯一對應的代碼 .

一個公定的字元對應標準為 American Standard Code American Standard Code for Information Interchange (ASCII)for Information Interchange (ASCII).

• printable charactersprintable characters have

– codes from 32 to 126

• control characterscontrol characters.

– others

• 例如:數字 0 ~ 9 ,在 ASCII 中對應的碼為 48 ~ 57

Page 35: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

基本型態字元( char)Example: Showchar.java

import java.io.*;

public class Showchar {

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

int x = System.in.read();System.out.println(x);System.out.println((char)(x-32));

}}

Page 36: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字元( Character)字元物件 – Character ObjectJava 提供了兩種處理字元的方法

char chr = ‘a’;Character charObj = new Character(‘a’);

特性比較

特性 char Character

型態 (Data Type) 基本型態 參考型態 ( 物件 )

記憶體用量 小 大提供常用 “方法”

(Method)無 有

Page 37: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字元( Character)Character 建構元( Constructor )

Character(char);

如: Character charObj = new Character(‘a’);

Character 唯一的建構元,根據參數傳來的字元,建立一個 Character 物件一旦 Character 物件建好後,就不得更改內涵的字元資料

Page 38: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字元( Character)提供的測試方法

方法 用途

int compareTo(Character ch) 比較兩個 Character 物件之大小順序boolean equals(Character ch) 比較兩個 Character 物件是否相等boolean isUpperCase(char c)

boolean isLowerCase(char c)

測試 c 是否為大寫測試 c 是否為小寫

boolean isLetter(char c)

boolean isDigit(char c)

boolean isLetterOrDigit(char c)

測試 c 是否為英文字母測試 c 是否為阿拉伯數字測試 c 是否為字母或數字

boolean isSpaceChar(char c)

boolean isWhiteSpace(char c)

測試 c 是否為 Unicode 的空白字元測試 c 是否為 Java 認定的空白間隔字元

Page 39: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字元( Character)提供的轉換方法( Casting Method )

例如:Character charObj = new Character(‘a’);轉成字元: char x = charObj.charValue();轉成字串: String s = charObj.toString();

相關用法及其他 methods 請查閱 J2SE 1.4.2 API

方法 用途char toUpperCase(char c)

char toLowerCase(char c)

轉成大寫字元轉成小寫字元

char charValue() 將 Character 物件內的字元轉出成 char

String toString() 將 Character 物件內的字元轉出成 String

Page 40: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字元( Character)Example: CharacterDemo.javaCharacter a = new Character('a');Character a2 = new Character('a');Character b = new Character('b');

int difference = a.compareTo(b);if (difference == 0) { System.out.println("a is equal to b.");} else if (difference < 0) { System.out.println("a is less than b.");} else if (difference > 0) { System.out.println("a is greater than b.");} System.out.println("a is " + ((a.equals(a2)) ? "equal" : "not equal") + " to a2.");

System.out.println("The character " + a.toString() + " is " + (Character.isUpperCase(a.charValue()) ? "upper" : "lower") + "case.");

Page 41: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)String 物件專門處理字串的常數如:在 Java 程式中出現 “ Hello! World!” , Java 即以 String 物件處理之特性:一旦宣告後,其內容不可更動

StringBuffer 物件專門處理字串的變數如:在 Java 中出現 “ Hello!” + “World!” 這類運算時, Java 會偷偷以 StringBuffer 處理特性:字串內容可以做更動

Page 42: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)

建立字串String s = “”; // 產生一個空字串物件String s = new String();

String s = “We are studying Java!!”;

String s = new String(“We are studying Java!!”); // NO!!

Page 43: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)常用的字串建構元( Constructors )

String() – 建立空字串

String(byte []) -- 利用給定的位元陣列來產生字串物件String(byte [], int, int)

String(char []) -- 利用給定的 char 陣列來產生字串物件String(char[], int, int)

String(String) -- 給定一個字串,來建立一個新的字串

String(StringBuffer) – 給定一個字串緩衝來建立一個字串物件

Page 44: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)取得字串的長度利用字串提供的 length() 方法範例:String s = “Hello! World!”;System.out.println(s.length());

結果: 13

Page 45: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)charAt(int)

呼叫 charAt(int) ,來取得字串的某個字元第一個字的 index 是 0 ,最後一個字元是 length()-1

例如:String str = “Niagara. O roar again!”;

char aChar = str.charAt(9);

此時 aChar 的字元內容為 ‘ O’

Page 46: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)利用 substring() 方法來取得子字串

String substring(int beginIndex);

String substring(int beginIndex, int endIndex);

例如:String str = “Niagara. O roar again!”

String roar = str.substring(11, 15);

此時 roar 字串內容為 “ roar”

Page 47: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)尋找字串中的字元或子字串利用 indexOf() 與 lastIndexOf() 方法indexOf(): 從第一個字元往後找lastIndexOf(): 從最後一個字元往前找

提供的方法int indexOf(String str);

• 回傳字串中,某特定子字串 str 第一次出現的位置int lastIndexOf(String str);

• 回傳字串中,某特定子字串 str 最後一次出現的位置

Page 48: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)Example: StringDemo.java

String s = "This is a book";

System.out.println("String: " + s);System.out.println("substring(8): " + s.substring(8));System.out.println("substring(0, 6): " + s.substring(0, 6));System.out.println("charAt(8): " + s.charAt(8));System.out.println("indexOf('i'): " + s.indexOf('i'));System.out.println("indexOf(\"is\"): " + s.indexOf("is"));System.out.println("lastIndexOf('i'): " + s.lastIndexOf('i'));System.out.println("lastIndexOf(\"is\"): " + s.lastIndexOf("is"));System.out.println("startsWith(\"Th\"): " + s.startsWith("Th"));System.out.println("endsWith(\"ok\"): " + s.endsWith("ok"));

Page 49: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串比較

範例:

結果: a != b

因為 == 在 Java 字串中,比較的是位址,不是內容

String a = “Java”;

String b = “Ja”;

b = b + “va”; // 此時 b = “Java”if (a == b)

System.out.println (“a == b”);else

System.out.println (“a != b”);

Page 50: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串比較

比較字串內容要用 String 物件本身提供的一個方法,叫做 equals()

範例

結果: a==b

String a = “Java”String b = “Ja”;

b = b + “va”; // 此時 b = “Java”if (a.equals(b))

System.out.println (“a == b”);else

System.out.println (“a != b”);

Page 51: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串相等比較

boolean equals(Object);

boolean equalsIgnoreCase(String);

開頭結尾比較boolean startsWith(String);

boolean endsWith(String);

部分區間比對Boolean regionMatches(int, String, int, int)

Page 52: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串內容處理

字串連結• + : 可作為字串連結或數學運算• String concat (String);

範例• String s1 = “Hello!”;

String s2 = “World!”;s1 = s1 + s2;

• String s1 = “Hello!”;String s2 = “World!”;s1.concat(s2);

Page 53: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串連結

所有 Java 的字串,一但指定後,是絕對不可以更動的。如果有任何更動, Java 本身會另外找一塊記憶體給新的值

Javaa

Jab

Java

b = b + “va”;b

Page 54: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串內容處理

去空白:• String trim();

範例• String str = “ Hello! World! “;

str.trim();System.out.println(str);

• 結果:“ Hello! World!”

Page 55: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)字串內容處理

字串轉換• String toLowerCase();

• String toUpperCase();

• String valueOf(int i);

• String valueOf(long l);

• String valueOf(float f);

• String valueOf(double d);

• String valueOf(char c);

• String valueOf(boolean b);

Page 56: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

字串( String)Example: StringDemo.javaString s = "This is a book";System.out.println("String: " + s);System.out.println("toLowerCase(): " + s.toLowerCase());System.out.println("toUpperCase(): " + s.toUpperCase());System.out.println("int 20 --> String: " + String.valueOf(20));System.out.println("long 20L --> String: " + String.valueOf(20L));System.out.println("float 20.0f --> String: " + String.valueOf(20.0f));System.out.println("double 20.0d --> String: " + String.valueOf(20.0d));System.out.println("char 'a' --> String: " + String.valueOf('a'));System.out.println("boolean true --> String: " + String.valueOf(true));

Page 57: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

StringBuffer可以修改字串內容,並加以操作建立 StringBuffer 物件

語法: StringBuffer strbuf = new StringBuffer()

StringBuffer strbuf = new StringBuffer(int)

• 一定得使用 new 呼叫建構元來建立物件,並設定 buffer 的容量( capacity )

• 初始化時的 capacity 必須做適當的猜測,要儘量減少記憶體分配的次數,這會讓程式執行時較有效率

methods• int length() :取得字串長度(回傳所含字元總數)• int capacity() :取得 buffer 容量

Page 58: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

修改 StringBuffer 物件內容strbuf.append()

• 增加字串 / 字元 /…至 StringBuffer 物件結尾• 若增加後超過物件的容量,則將自動在分配記憶體• 分配記憶體將導致執行效率滑落,故應儘量減少記憶體分配的動作 a reasonable first guess

strbuf.insert(intOffset, …)• 插入字串 / 字元 /…至 StringBuffer 物件中• intOffset 必須介於 0 與 xxx.length() 之間

strbuf.setCharAt(intIndex, charCh)• 將指定 intIndex 位置的字元設定成 charCh

Page 59: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

字串操作StringBuffer append(int i);

StringBuffer append(long l);

StringBuffer append(float f);

StringBuffer append(double d);

StringBuffer append(char c);

StringBuffer append(boolean b);

StringBuffer append(String str);

Page 60: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

字串操作StringBuffer insert(int offset, int i);

StringBuffer insert(int offset, long l);

StringBuffer insert(int offset, float f);

StringBuffer insert(int offset, double d);

StringBuffer insert(int offset, char c);

StringBuffer insert(int offset, boolean b);

StringBuffer insert(int offset, String str);

StringBuffer replace(int start, int end, String str);

StringBuffer delete(int start, int end);

StringBuffer reverse();

Page 61: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

子字串操作char charAt(int index);

void setCharAt(int index, char ch);

StringBuffer deleteCharAt(int index);

StringBuffer substring(int start);

StringBuffer substring(int start, int end);

Page 62: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

StringBuffer

Example: StringBufferDemo.java StringBuffer buf = new StringBuffer();

buf.append("This is a book");System.out.println("Append String: " + buf);buf.insert(10, "bad ");System.out.println("Insert String: " + buf);buf.replace(10, 13, "good");System.out.println("Replace String: " + buf);buf.delete(10, 15);System.out.println("Delete String: " + buf);buf.reverse();System.out.println("Reverse String: " + buf);

Page 63: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

Your Turn

請填寫以下程式碼,使得可以得到所要的結果public class StringExercise {

public static void main(String[] args) {

String str = “We are studying Java!!";

// d

// WE ARE STUDYING JAVA!!

// WE ARE

// studying Java!

// !!avaJ gniyduts era eW }

}

Page 64: Simple Data Objects

National Taiwan UniversityDepartment of Computer Science

and Information Engineering

Your Turn

設計一個 Java 程式從命令列參數輸入一個 12 小時制的時間字串,在轉換後,輸出成 24 小時制的時間字串。

如:輸入: java TimeTrans pm8:11:05輸出: 20:11:05