Chapter7

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Chapter7 as PDF for free.

More details

  • Words: 1,798
  • Pages: 9
CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

บทที่ 7 การประมวลผลขอมูล String 7.1 การประกาศขอมูล String เปน class ใน java.lang.String ซึง่ ถูกนําเขามาในโปรแกรมโดยอัตโนมัติ ดังนั้นจึงไมจําเปน ตองใชคําสั่ง import เพื่อนํา class เขาสูการประมวลผล ก็สามารถเรียกใชได class String ไดเตรียม constructors ( constructors เปน method ทีใ่ ชสาหรั ํ บการกําหนดคาเริ่มตน ใหกับ object ของ class ) ไวทงั้ หมด 9 แบบ ตัวอยางที่ 1 เปนตัวอยางการใช class String โดยผาน constructors จํานวน 7 แบบดวยกัน ตัวอยางที่ 1 1 public class StringConstructors { 2 3 public static void main (String args[]) { 4 char charArray[] = { ‘b’, ‘i’, ‘r’, ‘t’, ‘h’, ‘ ‘, ‘d’, ‘a’, ‘y’ }; 5 byte byteArray[] = { (byte) ’n’, (byte) ‘e’, (byte) ‘w’, (byte) ‘ ‘, (byte) ‘y’, 6 (byte) ‘e’, (byte) ‘a’, (byte) ‘r’ }; 7 StringBuffer buffer; 8 String s, s1, s2, s3, s4, s5, s6, s7, output; 9 10 s = new String( “hello” ); 11 buffer = new StringBuffer( “Welcome to Java Programming” ); 12 13 s1 = new String(); 14 s2 = new String( s ); 15 s3 = new String( charArray ); 16 s4 = new String( charArray, 6, 3 ); 17 s5 = new String( byteArray, 4, 4 ); 18 s6 = new String( byteArray ); 19 s7 = new String( buffer ); 20 21 output = “s1 = “ + s1 + 22 “\ns2 = “ + s2 + 23 “\ns3 = “ + s3 + 24 “\ns4 = “ + s4 + 25 “\ns5 = “ + s5 + 26 “\ns6 = “ + s6 + 27 “\ns7 = “ + s7; 28 System.out.println(output); 29 30 } // end method main 31 32 } // end class StringConstructors

การเรียกใช method ตางๆ ของ class String จําเปนตองมีการสราง object ขึน้ มากอน ดังแสดงใน บรรทัดที่ 7,8,10 และ 11 หลักการการประกาศ object จะเหมือนกับการประกาศ object ของ class อื่นๆ

2/2545

1

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

Constructor ทั้ง 7 แบบ แสดงในบรรทัดที่ 13 – 19 ดังมีรายละเอียด ดังนี้ บรรทัดที่ 13 คาเริ่มตนของ s1 จะไมมกี ารเก็บอักขระใดๆ ความยาวจะเทากับ 0 บรรทัดที่ 14 เปนการ copy ขอความของ s ใหกับ s2 บรรทัดที่ 15 constructor นีจ้ ะเปนการรับคาของตัวแปรชุดของ character และกําหนดเปนคาเริ่มตน ใหกับ s3 บรรทัดที่ 16 constructor นีเ้ ปนการกําหนดคาของสมาชิกบางตัวของตัวแปรชุดของ character โดย ตัวเลขตัวแรก เปนตําแหนงเริ่มตนของตัวอักขระที่ตองการ ตัวเลขตัวที่สอง เปนจํานวนสมาชิกนับจากตําแหนง เริม่ ตน ที่ตองการกําหนดใหกับ object ของ class String บรรทัดที่ 17 การทํางานของ constructor นีจ้ ะคลายกับบรรทัดที่ 16 เพียงแตชนิดขอมูลจะเปนแบบ byte การกําหนดตัวเลขดังแสดงในบรรทัดที่ 16 และ 17 หากตัวเลขลําดับ หรือจํานวนตัวอักขระ เกินขอบเขต ของตัวแปรชุด โปรแกรมจะจัดวามี error เกิดขึน้ ซึ่งจะมีการเรียก StringIndexOutOfBoundsException เพื่อ บอกใหผูใชทราบถึงขอผิดพลาดที่เกิดขึ้น บรรทัดที่ 18 เปนการรับคาของตัวแปรชุดของ byte ทัง้ ชุด และกําหนดเปนคาเริ่มตนใหกับ s6 บรรทัดที่ 19 เปนการกําหนดคาเริ่มตนใหกับ s7 โดยรับมาจาก object ของ class StringBuffer ซึ่ง เปน class ทีม่ ขี นาดไมตายตัว แตจะขึ้นอยูกับจํานวนอักขระใน string นั้นๆ 7.2 String Methods: length, charAt and getChars ตัวอยางที่ 2 public class StringMisc { public static void main ( String args[] ) { String s1, output; char charArray[]; s1 = new String( “hello there” ); charArray = new char [5]; // output the string output = “s1: “ + s1; // test the length method output += “\nLength of s1: “ + s1.length(); // loop through the characters in s1 and display reversed output += “\nThe string reversed is: “; for ( int j = s1.length() –1; j>=0; j--) output += s1.charAt(j) + “ “; // copy characters from string into char array s1.getChars(0, 5, charArray, 0 ); output += “\nThe character array is: “; for ( int j=0; j
2/2545

2

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

length() เปน method ที่ return คาจํานวนอักขระใน string นั้นๆ method นีใ้ น class String จะมี การเรียกใชงานที่ตางกับ length ของ arrays กลาวคือ length ใน class String ตองมีเครื่องหมาย () ปดทายทุก ครั้ง สวนของ arrays นั้นไมตองมี charAt() เปน method ที่ return ตัวอักขระในตําแหนงที่ระบุ อักขระตัวแรกของ string จะเปนลําดับที่ 0 ซึง่ เหมือนกับการอางอิงสมาชิกในตัวแปรชุด getChars() เปนการ copy sub-string ไปเก็บไวที่ตัวแปรชุด ชนิด character ตัวเลขตัวแรกคือ ตําแหนงของอักขระที่จะเริ่มตน copy ตัวเลขตัวทีส่ อง เปนตําแหนงถัดจากตําแหนงสุดทายของตัวอักขระที่ ตองการ copy parameter ตัวที่ 3 เปนชื่อตัวแปรชุดที่จะเก็บขอมูลที่ copy สวนตัวเลขตัวสุดทายเปน ตําแหนงเริ่มตนของตัวแปรชุดที่จะนําชุดอักขระไปเก็บไว 7.3 การเปรียบเทียบขอมูล String มีการเปรียบเทียบ 4 ลักษณะ ดังนี้ 1. String1.equals(String2) 2. String1.equalsIgnoreCase(String2) เปนตัวพิมพใหญ หรือตัวพิมพเล็ก 3. String1.compareTo(String2) นอยกวา หรือเทากัน 4. String1.substring(start, pastEnd)

// เปรียบเทียบขอความระหวาง String1 กับ String2 // เปรียบเทียบขอความโดยไมคํานึงถึงวาอักษรนั้น // เปรียบเทียบขอความใหผลในลักษณะมากกวา // ตัดขอความตั้งแตตําแหนง start ถึง pastEnd

ตัวอยางที่ 3 class SortArray { public static void main ( String args[] ) { String text[] = { “Java”, “Computer”, “Memory”, "String”, “Book”, “Array”, “Object”, “Polymorphism”, “Inheritance” }; int tmp; String tmpString; for (int j=0; j 0) tmp = k; tmpString = text[j]; text[j] = text[tmp]; text[tmp] = tmpString; } for (int m=0; m
2/2545

3

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

String1.equals(String2) ในการเปรียบเทียบขอมูลประเภท String ไมสามารถใชตัวกระทํา ‘==’ ในการทดสอบได เนื่องจาก String เปน class ตัวแปรทีต่ ั้งขึ้นเปนการเก็บที่อยูของขอมูล ไมไดเก็บตัวขอมูล method equals นี้ จะทําการเปรียบเทียบ String1 และ String2 วาเหมือนกันหรือไม ซึ่งจะเปนการ เปรียบเทียบแบบ case sensitive กลาวคือ ตัวอักษรพิมพใหญ กับตัวอักษรพิมพเล็กจะถือวาเปนคนละตัวกัน String1.equalsIgnoreCase(String2) มีการทํางานเหมือนกับ method equals แตจดุ ที่แตกตางคือ ในกรณีนี้ตัวอักษรพิมพใหญ กับตัว อักษรพิมพเล็กจะถือวาเปนตัวเดียวกัน String1.compareTo(String2) เปนการเปรียบเทียบขอมูล String1 กับ String2 โดยจะเปรียบเทียบทีละตัวอักษร และผลการเปรียบ เทียบจะคืนคาเปนจํานวนเต็ม ดังนี้ ถา String1 เหมือนกับ String2 จะคืนคา 0 ถา String1 มีรหัส ASCII นอยกวา String2 จะคืนคา ติดลบ ถา String1 มีรหัส ASCII มากกวา String2 จะคืนคา เปนบวก String1.substring(start, end) เปนการดึงบางสวนของ string (sub-string) เชน String aName = “Java Programming”; String subStr = new String( aName.substring( 0, 3) ); subStr จะมีคาตัวอักษร 3 ตัวแรกของ aName คือ Jav 7.4 Method อืน่ ๆ ของ class String ตัวอยางที่ 4 public class StringMisc2 { public static void main( String args[] ) { String s1 = new String( “hello” ), s2 = new String( “GOOD BYE” ), s3 = new String( “ spaces “), output; output = “s1 = “ + s1 + “\ns2 = “ + s2 + “\ns3 = “ + s3; // test method replace output += “ \n\nReplace ‘l’ with ‘L’ in s1: “ + s1.replace(‘l’, ‘L’); // test toLowerCase and toUpperCase output += “\n\ns1.toUpperCase() = “ + s1.toUpperCase() + “\ns2.toLowerCase() = “ + s2.toLowerCase();

2/2545

4

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

ตัวอยางที่ 4 (ตอ) // test trim method output += “\n\ns3 after trim = \” “ + s3.trim() + “\””; // test toString method output += “\n\ns1 = “ + s1.toString(); // test toCharArray method char charArray[] = s1.toCharArray(); output += “\n\ns1 as a character array = “; for ( int j=0; j
7.5 StringBuffer การเปลี่ยนแปลงคาของ String ทุกครัง้ จะเปนการจองเนื้อที่ใหมใหทุกครั้ง หรือกลาวอีกนัยหนึ่งคือ เปน class ทีอ่ นุญาตใหอานไดอยางเดียว จะไมมีการแกไขขอมูลในตัวแปรประเภท String StringBuffer จะเปนการแกปญหาโดยไมตองจองเนื้อที่ใหมทุกครั้ง นัน่ คือ อนุญาตใหมีการแกไขตัว ขอมูลได โดย class StringBuffer นี้มี constructor 3 รูปแบบ คือ public StringBuffer() // เตรียมเนื้อที่สําหรับขอมูล โดยปกติจะเตรียมใหประมาณ 16 ตัวอักษร public StringBuffer(int length) // กําหนดขนาดที่ตองการ แตยังไมมีขอมูลที่จะเก็บ public StringBuffer(String S) // เก็บขอมูลตามที่กําหนด ขนาดจะเทากับขนาดที่กําหนด บวกอีก 16 ตัวอักษร ทุกๆ StringBuffer จะมีขนาดจํากัด แตเมื่อมีการเพิ่มจํานวนตัวอักษร Java จะเพิ่มขนาดใหโดย อัตโนมัติ method ของ StringBuffer ประกอบดวย - length // จะ return จํานวนอักขระที่อยูใน StringBuffer - capacity // จะ return จํานวนอักขระที่สามารถเก็บไวที่ StringBuffer ได - setLength // เปนการกําหนดจํานวนอักขระที่อยูใน StringBuffer - ensureCapacity // เปนการกําหนดขนาดความจุตํ่าสุดที่ StringBuffer นัน้ จะ เก็บอักขระได - charAt // จะ return อักขระที่อยูในตําแหนงที่ระบุใน method charAt 2/2545

5

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

- setCharAt

-

// method นี้จะมี argument 2 ตัวคือ ตัวเลขที่ระบุตําแหนง ของอักขระ และตัวอักขระ โดย method นีจ้ ะเปลี่ยนอักขระ ทีอ่ ยูในตําแหนงที่ระบุใน method นี้ ใหเปนอักขระที่ระบุ เปน argument ใน method นี้นั่นเอง getChars // จะ return คา array ชนิด character ทีม่ คี วามยาว และขอ มูลเหมือนกับที่อยูใน StringBuffer นั้นๆ reverse // จะเปนการเปลี่ยนลําดับการเรียงอักขระใน StringBuffer String1.append(String2) // นําขอมูลใน String2 ตอทาย String1 String2.insert(position, String2) // แทรก String2 ตามตําแหนงที่กําหนดในสวนของ position ที่ String1 อักษรตัวแรกของ String จะเริ่มจาก 0 delete และ deleteCharAt // เปนการลบอักขระที่อยูใน StringBuffer

ตัวอยางที่ 5 : เปนตัวอยางการใชงาน method length, capacity, setLength และ ensureCapacity import javax.swing.*; public class StringBufferCapLen { public static void main( String args[] ) { StringBuffer buf = new StringBuffer( "Hello, how are you?" ); String output = "buf = " + buf.toString() + "\nlength = " + buf.length() + "\ncapacity = " + buf.capacity(); buf.ensureCapacity( 75 ); output += "\n\nNew capacity = " + buf.capacity(); buf.setLength( 10 ); output += "\n\nNew length = " + buf.length() + "\nbuf = " + buf.toString(); JOptionPane.showMessageDialog( null, output, "StringBuffer length and capacity Methods", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

2/2545

6

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

ตัวอยางที่ 6 : เปนตัวอยางการใชงาน method charAt, setCharAt, getChars และ reverse import javax.swing.*; public class StringBufferChars { public static void main( String args[] ) { StringBuffer buf = new StringBuffer( "hello there" ); String output = "buf = " + buf.toString() + "\nCharacter at 0: " + buf.charAt( 0 ) + "\nCharacter at 4: " + buf.charAt( 4 ); char charArray[] = new char[ buf.length() ]; buf.getChars( 0, buf.length(), charArray, 0 ); output += "\n\nThe characters are: "; for ( int i = 0; i < charArray.length; ++i ) output += charArray[ i ]; buf.setCharAt( 0, 'H' ); buf.setCharAt( 6, 'T' ); output += "\n\nbuf = " + buf.toString(); buf.reverse(); output += "\n\nbuf = " + buf.toString(); JOptionPane.showMessageDialog( null, output, "Demonstrating StringBuffer Character Methods", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

ตัวอยางที่ 7 : เปนตัวอยางที่ใชงาน method append import javax.swing.*; public class StringBufferAppend { public static void main( String args[] ) { Object o = "hello"; String s = "good bye"; char charArray[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; boolean b = true; char c = 'Z'; int i = 7; long l = 10000000; float f = 2.5f; double d = 33.333; StringBuffer buf = new StringBuffer();

2/2545

7

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

ตัวอยางที่ 7 (ตอ) buf.append( o ); buf.append( " " ); buf.append( s ); buf.append( " " ); buf.append( charArray ); buf.append( " " ); buf.append( charArray, 0, 3 ); buf.append( " " ); buf.append( b ); buf.append( " " ); buf.append( c ); buf.append( " " ); buf.append( i ); buf.append( " " ); buf.append( l ); buf.append( " " ); buf.append( f ); buf.append( " " ); buf.append( d ); JOptionPane.showMessageDialog( null, "buf = " + buf.toString(), "Demonstrating StringBuffer append Methods", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

ตัวอยางที่ 8 : เปนตัวอยางการใชงาน method insert delete และ deleteCharAt import javax.swing.*; public class StringBufferInsert { public static void main( String args[] ) { Object o = "hello"; String s = "good bye"; char charArray[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; boolean b = true; char c = 'K'; int i = 7; long l = 10000000; float f = 2.5f; double d = 33.333; StringBuffer buf = new StringBuffer(); buf.insert( 0, o ); buf.insert( 0, " " ); buf.insert( 0, s ); buf.insert( 0, " " ); buf.insert( 0, charArray );

2/2545

8

CS313: Object-Oriented Programming

บทที่ 7: การประมวลผลขอมูล String

ตัวอยางที่ 8 (ตอ) buf.insert( 0, " " ); buf.insert( 0, b ); buf.insert( 0, " " ); buf.insert( 0, c ); buf.insert( 0, " " ); buf.insert( 0, i ); buf.insert( 0, " " ); buf.insert( 0, l ); buf.insert( 0, " " ); buf.insert( 0, f ); buf.insert( 0, " " ); buf.insert( 0, d ); String output = "buf after inserts:\n" + buf.toString(); buf.deleteCharAt( 10 ); // delete 5 in 2.5 buf.delete( 2, 6 ); // delete .333 in 33.333 output += "\n\nbuf after deletes:\n" + buf.toString(); JOptionPane.showMessageDialog( null, output, "Demonstrating StringBufferer Inserts and Deletes", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

ขอควรระวังในการใช method ทีเ่ กีย่ วของกับการอางอิงตําแหนงของอักขระใน StringBuffer เชน charAt deleteCharAt ฯลฯ คือคาตัวเลขที่อางอิงตําแหนงนั้นจะตองมีคามากกวาหรือเทากับ 0 และนอยกวา คาความยาวของอักขระใน StringBuffer

2/2545

9

Related Documents

Chapter7
July 2020 11
Chapter7
November 2019 18
Chapter7
June 2020 9
Chapter7
November 2019 22
Chapter7
May 2020 7
Chapter7
October 2019 21