1 / 42

Hoofdstuk 11: Strings en karakters

Hoofdstuk 11: Strings en karakters. 11.1 Inleiding. In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer Deze klassen vormen de basis voor string- en karakterbewerking in Java. 11.2 Fundamenten van karakters en Strings.

amal-riggs
Download Presentation

Hoofdstuk 11: Strings en karakters

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hoofdstuk 11: Strings en karakters

  2. 11.1 Inleiding • In dit hoofdstuk bespreken we de mogelijkheden van de klassen : • String • StringBuffer • Character • StringTokenizer • Deze klassen vormen de basis voor string- en karakterbewerking in Java.

  3. 11.2 Fundamenten van karakters en Strings • Een karakter wordt intern opgeslagen door zijn overeenkomstige Unicode (zie appendix B). Deze Unicode is een integerwaarde. • Voorbeeld : char kar=‘z’;Intern : kar 122

  4. Eddy Wally 11.2 Fundamenten van karakters en Strings (vervolg) • Een string is een reeks van karakters die als één geheel wordt beschouwd. Kan bestaan uit letters, getallen en andere speciale karakters (+, -,*,…). • Een string is een object van de klasse String. • Voorbeeld : String z=“Eddy Wally”;Intern : z

  5. 11.3 Klasse String11.3.1. String-constructoren • De klasse String voorziet negen constructors om String-objecten te initialiseren (zie Fig.11.1).

  6. 1 // Fig. 11.1: StringConstructors.java 2 // Dit programma demonstreert String klasse constructoren. 3 4 // Java extension packages 5 import javax.swing.*; 6 7 public class StringConstructors 8 { 9 // test String constructoren 10 public static void main( String args[] ) 11 { 12 char charArray[] = { 'b', 'i', 'r', 't', 'h', ' ', 13 'd', 'a', 'y' }; 14 byte byteArray[] = { ( byte ) 'n', ( byte ) 'e', 15 ( byte ) 'w', ( byte ) ' ', ( byte ) 'y', 16 ( byte ) 'e', ( byte ) 'a', ( byte ) 'r' }; 17 18 StringBuffer buffer; 19 String s, s1, s2, s3, s4, s5, s6, s7, output; 20 21 s = new String( "hello" ); 22 buffer = new StringBuffer( "Welcome to Java Programming!" ); 23 Een StringBuffer is string met een dynamische grootte en wijzigbaar

  7. 24 // gebruik String constructors 25 s1 = new String(); 26 s2 = new String( s ); 27 s3 = new String( charArray ); 28 s4 = new String( charArray, 6, 3 ); 29 s5 = new String( byteArray, 4, 4 ); 30 s6 = new String( byteArray ); 31 s7 = new String( buffer ); 32 33 // voeg Strings toe aan output 34 output = "s1 = " + s1 + "\ns2 = " + s2 + "\ns3 = " + s3 + 35 "\ns4 = " + s4 + "\ns5 = " + s5 + "\ns6 = " + s6 + 36 "\ns7 = " + s7; 37 38 JOptionPane.showMessageDialog( null, output, 39 "Demonstrating String Class Constructors", 40 JOptionPane.INFORMATION_MESSAGE ); 41 42 System.exit( 0 ); 43 } 44 45 } // einde klasse StringConstructors

  8. 11.3 String-constructoren (vervolg) • s1 = new String(); =>lege string s1 • s2 = new String(s); => s2 s hello hello

  9. 11.3 String-constructoren (vervolg) • s4 = new String(charArray,6,3); s4charArray 0 1 2 3 4 5 6 7 8 day aantal b | i | r | t | h | | d| a| y offset=start

  10. 11.3.2. String-methodes • methode “length()” : geeft het aantal karakters van een String weerVoorbeeld : s1.length() NIET s1.length (zoals bij arrays) • Eerste karakter in een String begint bij positie 0! h a m b u r g e r 0 1 2 3 4 5 6 7 8

  11. 11.3.2. String-methodes • methode “charAt(pos)” : geeft het karakter op de positie pos terug • methode “getChars(start,laatste,naar,vanafpos)” : kopieert de karakters van een bepaalde String vanaf positie start t.e.m. laatste-1, in de array naar vanaf index vanafpos

  12. 1 // Fig. 11.2: StringMiscellaneous.java 2 // Dit programma demonstreert de length, charAt en getChars 3 // methodes van de String klasse. 4 import javax.swing.*; 5 6 public class StringMiscellaneous 7 { 8 public static void main( String args[] ) 9 { 10 String s1= "hello there“; 11 char charArray[]= new char[ 5 ];; 12 13 String output = "s1: " + s1; 14 15 // test length methode 16 output += "\nLength of s1: " + s1.length(); Bepaal aantal karakters in Strings1

  13. 18 // loop door karakters in s1 en toon ze in omgekeerde volgorde 19 output += "\nThe string reversed is: "; 20 21 for ( int count = s1.length() - 1; count >= 0; count-- ) 22 output += s1.charAt( count ) + " "; 23 24 // kopieer karakters van string naar charArray 25 s1.getChars( 0, 5, charArray, 0 ); 26 output += "\nThe character array is: "; 27 28 for ( int count = 0; count < charArray.length; count++ ) 29 output += charArray[ count ]; 30 31 JOptionPane.showMessageDialog( null, output, 32 “String class character manipulation methods", 33 JOptionPane.INFORMATION_MESSAGE ); 34 35 System.exit( 0 ); 36 } 37 38 } // einde klasse StringMiscellaneous

  14. 11.3.3. Strings vergelijken • Java voorziet een aantal methodes om String-objecten met elkaar te vergelijken. • Wanneer de computer twee strings met elkaar vergelijkt, dan worden eigenlijk de interne numerieke codes van alle karakters in de strings met elkaar vergeleken. String s1 is groter dan String s2 => s1 komt alfabetisch na s2

  15. 1 // Fig. 11.3: StringCompare.java 2 // String methodes equals,equalsIgnoreCase, compareTo, en regionMatches 3 import javax.swing.JOptionPane; 4 5 public class StringCompare 6 { 7 public static void main( String args[] ) 8 { 9 String s1 = new String( "hello" ); 10 String s2 = "good bye"; 11 String s3 = "Happy Birthday"; 12 String s4 = "happy birthday"; 13 14 output = "s1 = " + s1 + "\ns2 = " + s2 + 15 "\ns3 = " + s3 + "\ns4 = " + s4 + "\n\n"; 16 17 // test voor gelijkheid 18 if ( s1.equals( "hello" ) ) 19 output += "s1 equals \"hello\"\n"; 20 else 21 output += "s1 does not equal \"hello\"\n"; 22 Methode equals test twee objecten op gelijkheid gebruikmakend van lexicographical comparison

  16. 23 // test voor gelijkheid met == 24if ( s1 == "hello" ) 25 output += "s1 equals \"hello\"\n"; 26 else 27 output += "s1 does not equal \"hello\"\n"; 28 29 // test voor gelijkheid (ignore case) 30 if ( s3.equalsIgnoreCase( s4 ) ) 31 output += "s3 equals s4\n"; 32 else 33 output += "s3 does not equal s4\n"; 34 35 // test compareTo 36 output +="\ns1.compareTo( s2 ) is " + s1.compareTo( s2 ) + 37 "\ns2.compareTo( s1 ) is " + s2.compareTo( s1 ) + 38 "\ns1.compareTo( s1 ) is " + s1.compareTo( s1 ) + 39 "\ns3.compareTo( s4 ) is " + s3.compareTo( s4 ) + 40 "\ns4.compareTo( s3 ) is " + s4.compareTo( s3 ) +"\n\n"; 41 42 // test regionMatches (hoofdletter-gevoelig) 43 if ( s3.regionMatches( 0, s4, 0, 5 ) ) 44 output += "First 5 characters of s3 and s4 match\n"; 45 else 46 output +="First 5 characters of s3 and s4 do not match\n"; Test twee objecten op gelijkheid, maar negeert hoofd- of kleine letters in String Gelijkheidsoperator (==) test of beide referenties naar hetzelfde object in het geheugen refereren Methode compareTo vergelijkt String objecten Methode regionMatches vergelijkt delen van twee String objecten op gelijkheid

  17. 48 // test regionMatches (ignore case) 49 if ( s3.regionMatches( true, 0, s4, 0, 5 ) ) 50 output += "First 5 characters of s3 and s4 match"; 51 else 52 output +="First 5 characters of s3 and s4 do not match"; 53 54 JOptionPane.showMessageDialog( null, output, 55 "String comparisons",JOptionPane.INFORMATION_MESSAGE ); 56 57 System.exit( 0 ); 58 } 59 60 } // einde klasse StringCompare

  18. 11.3.3. Strings vergelijken (vervolg) • equals() : test of twee objecten identiek zijn(methode overgeërfd van de klasse Object)=> Geeft true of false terug, naargelang alle karakters uit de String-objecten gelijk zijn of niet (Het zijn de Unicode-waarden die worden vergeleken).

  19. 11.3.3. Strings vergelijken (vervolg) • operator == : test of twee referentie-variabelen naar hetzelfde object in het geheugen wijzen.=> Het zijn de adressen in de referentie-variabelen naar de Strings die vergeleken worden, niet de inhoud van de Strings! • Voorbeeld : s1=“hello”; s1==“hello”? s1=new String(“hello”);

  20. 11.3.3. Strings vergelijken (vervolg) • equalsIgnoreCase() : test of twee String-objecten identiek zijn, maar houdt geen rekening met hoofd- en kleine letters => Geeft true of false terug • compareTo() => Geeft 0 terug als de Strings dezelfde zijn of een negatief/positief getal terug als ze verschillend zijn

  21. 11.3.3. Strings vergelijken (vervolg) • regionMatches() : vergelijkt delen van twee String-objecten Voorbeeld : s1.regionMatches(0 , s4, 0, 5)=> vergelijk de vijf eerste karakters uit s1 met die van s40=start in s10=start in s45= aantal karakters => Geeft true of false terug

  22. 1 // Fig. 11.4: StringStartEnd.java 2 // Stringmethodes startsWith enendsWith. 3 import javax.swing.*; 4 5 public class StringStartEnd 6 { 7 public static void main( String args[] ) 8 { 9 String strings[] = {"started", "starting", "ended", "ending" }; 10 String output = ""; 11 12 // test methode startsWith 13 for ( int count = 0; count < strings.length; count++ ) 14 15 if ( strings[ count ].startsWith( "st" ) ) 16 output += "\"" + strings[ count ]+"\"starts with \"st\"\n"; 17 18 output += "\n"; 19 Methode startsWith bepaalt of de String begint met bepaalde karakters

  23. 20 // test methode startsWith beginnend op positie 21 // 2 van de string 22 for ( int count = 0; count < strings.length; count++ ) 23 24 if ( strings[ count ].startsWith( "art", 2 ) ) 25 output+= "\"" + strings[ count ] + 26 "\"starts with \"art\" at position 2\n"; 27 28 output += "\n"; 29 30 // test methode endsWith 31 for ( int count = 0; count < strings.length; count++ ) 32 33if ( strings[ count ].endsWith( "ed" ) ) 34 output += "\"" + strings[ count ] + "\" ends with \"ed\"\n"; 35 36 JOptionPane.showMessageDialog( null, output, 37 "String Class Comparisons",JOptionPane.INFORMATION_MESSAGE ); 38 39 System.exit( 0 ); 40 } 41 42 }// einde klasse StringStartEnd Methode endsWith bepaalt of String eindigt met bepaalde karakters

  24. 11.3.3. Strings vergelijken (vervolg) • startsWith(string) => Geeft true of false terug, al naargelang het String-object begint met string. • endsWith(string) => Geeft true of false terug, al naargelang het String-object eindigt met string.

  25. 11.3.4. Localiseren van Karakters en Substrings in Strings • Methode indexOf: zoekt het eerste voorkomen van een karakter in een String. Voorbeeld : letters.indexOf(‘c’) => geeft de index van het karakter c in de String letters weer , of => geeft -1 terug, als het karakter niet in de String voorkomt Voorbeeld : letters.indexOf(‘c’,7) : idem, maar nu wordt pas gestart vanaf index 7 in letters

  26. 11.3.4. Localiseren van Karakters en Substrings in Strings (verv.) • Methode indexOf: kan ook gebruikt worden om een substring in een String te zoeken. • Methode lastIndexOf : idem indexOf, alleen wordt nu het laatste voorkomen van een karakter weergegeven. (Zoekt van achter naar voor in de String)

  27. 1 // Fig. 11.5: StringIndexMethods.java 2 // String zoekmethodes indexOf en lastIndexOf. 3 import javax.swing.*; 4 5 public class StringIndexMethods 6 { 7 public static void main( String args[] ) 8 { 9 String letters = "abcdefghijklmabcdefghijklm"; 10 11 // test indexOf om een karakter in een string te localiseren 12 String output = "'c' is located at index " +letters.indexOf( 'c' ); 13 14 output += "\n'a' is located at index " +letters.indexOf( 'a', 1 ); 15 16 output += "\n'$' is located at index " +letters.indexOf( '$' ); 17 18 // test lastIndexOf om een karakter in een string te vinden 19 output += "\n\nLast 'c' is located at index " + 20 letters.lastIndexOf( 'c' ); 21 22 output += "\nLast 'a' is located at index " + 23 letters.lastIndexOf( 'a', 25 ); 24 Methode indexOf vindt eerste voorkomen van karakter in String Methode lastIndexOf vindt laatste voorkomen van karakter in String

  28. 25 output += "\nLast '$' is located at index " + 26 letters.lastIndexOf( '$' ); 27 28 // test indexOf om een substring in een string te zoeken 29 output += "\n\n\"def\" is located at index " + 30 letters.indexOf( "def" ); 31 32 output += "\n\"def\" is located at index " + 33 letters.indexOf( "def", 7 ); 34 35 output += "\n\"hello\" is located at index " + 36 letters.indexOf( "hello" ); 37 38 // test lastIndexOf om een substring in een string te vinden 39 output += "\n\nLast \"def\" is located at index " + 40 letters.lastIndexOf( "def" ); 41 42 output += "\nLast \"def\" is located at index " + 43 letters.lastIndexOf( "def", 25 ); 44 45 output += "\nLast \"hello\" is located at index " + 46 letters.lastIndexOf( "hello" ); 47 48 JOptionPane.showMessageDialog( null, output, 49 "String searching methods",JOptionPane.INFORMATION_MESSAGE ); 50 51 System.exit( 0 ); 52 } 53 54 } // einde klasse StringIndexMethods Methodes indexOf en lastIndexOf kunnen ook voorkomens van substrings vinden

  29. 11.3.5. Substrings uit Strings halen • Methodesubstring => maakt uit een bestaande String een nieuwe String. Voorbeeld : letters.substring(20) => geeft een nieuwe String weer , die een substring is van letters, beginnend vanaf index 20. Voorbeeld : letters.substring(start,last) : geeft substring uit letters terug, kopie van karakters van index start t.e.m. index last-1

  30. 1 // Fig. 11.6: SubString.java 2 // String klasse substring methodes. 3 import javax.swing.*; 4 5 public class SubString 6 { 7 public static void main( String args[] ) 8 { 9 String letters = "abcdefghijklmabcdefghijklm"; 10 11 // test substring methodes 12 String output = "Substring from index 20 to end is " + 13 "\"" + letters.substring( 20 ) + "\"\n"; 14 15 output += "Substring from index 0 up to 6 is " + 16 "\"" + letters.substring( 0, 6 ) + "\""; 17 18 JOptionPane.showMessageDialog( null, output, 19 "String Substring Methods",JOptionPane.INFORMATION_MESSAGE ); 20 21 System.exit( 0 ); 22 } 23 24 } // einde klasse SubString Beginnend op index 20, haal karakters uit Stringletters Haal karakters van index 0 tot 6 uit Stringletters

  31. 11.3.6. Concateneren van Strings • Methode concat => geeft een nieuwe String terug, die een concatenatie is van twee Strings. Voorbeeld : s1.concat(s2) => geeft een nieuwe String weer , die een samenvoeging is van s1 en s2. s1 en s2 worden niet gewijzigd bij deze operatie!

  32. 1 // Fig. 11.7: StringConcatenation.java 2 // String concat methode. 3 import javax.swing.*; 4 5 public class StringConcatenation 6 { 7 public static void main( String args[] ) 8 { 9 String s1 = new String( "Happy " ), 10 s2 = new String( "Birthday" ); 11 12 String output = "s1 = " + s1 + "\ns2 = " + s2; 13 14 output += "\n\nResult of s1.concat( s2 ) = " +s1.concat( s2 ); 15 output += "\ns1 after concatenation = " + s1; 16 17 JOptionPane.showMessageDialog( null, output, 18 "String method concat",JOptionPane.INFORMATION_MESSAGE ); 19 20 System.exit( 0 ); 21 } 22 23 } // einde klasse StringConcatenation Concateneer Strings2 en Strings1

  33. 11.3.7. Verscheidene String-methodes • Methode replace => geeft een nieuwe String terug, die een kopie is van de originele, maar waarin een bepaald karakter vervangen is door een ander. • Methode toUpperCase => geeft een nieuwe String terug, die een kopie is van de originele, maar waarin alle karakters nu in hoofdletters staan.

  34. 11.3.7. Verscheidene String-methodes (vervolg) • Methode toLowerCase => geeft een nieuwe String terug, die een kopie is van de originele, maar waarin alle karakters nu in kleine letters staan. • Methode trim => geeft een nieuwe String terug, die een kopie is van de originele, maar waarin alle spaties vooraan en achteraan zijn verwijderd.

  35. 11.3.7. Verscheidene String-methodes (vervolg) • Methode toCharArray => kopieert alle karakters uit een String naar een array bestaande uit chars. • Voorbeelden : zie fig. 11.8.

  36. 1 // Fig. 11.8: StringMiscellaneous2.java 2 // String methodes replace,toLowerCase, toUpperCase, trim en toCharArray 3import javax.swing.*; 4 5 public class StringMiscellaneous2 6 { 7 public static void main( String args[] ) 8 { 9 String s1 = new String( "hello" ), 10 s2 = new String( "GOOD BYE" ), 11 s3 = new String( " spaces " ); 12 13 String output = "s1 = " + s1 + "\ns2 = " + s2 +"\ns3 = " + s3; 14 15 // test methode replace 16 output += "\n\nReplace 'l' with 'L' in s1: " + 17 s1.replace( 'l', 'L' ); 18 19 // test toLowerCase en toUpperCase 20 output += "\n\ns1.toUpperCase() = " + s1.toUpperCase() + 21 "\ns2.toLowerCase() = " + s2.toLowerCase(); 22 23 // test trim methode 24 output += "\n\ns3 after trim = \"" + s3.trim() + "\""; 25 Gebruik methode replace om een kopie van s1 terug te geven, waarin elke ‘l’ vervangen is door ‘L’ Gebruik methode toUpperCase om een kopie van s1 terug te geven waarin elk karakter een hoofdletter is Gebruik methode toLowerCase om een kopie van s2 terug te geven waarin elk karakter een kleine letter is Gebruik methode trim om een kopie van s3 terug te geven waarin elke spatie is verwijderd

  37. 26 // test toCharArray methode 27 char charArray[] = s1.toCharArray(); 28 output += "\n\ns1 as a character array = "; 29 30 for ( int count = 0; count < charArray.length; ++count ) 31 output += charArray[ count ]; 32 33 JOptionPane.showMessageDialog( null, output, 34 “Additional String methods",JOptionPane.INFORMATION_MESSAGE ); 35 36 System.exit( 0 ); 37 } 38 39 } // einde klasse StringMiscellaneous2 Gebruik methode toCharArray om karakter array bestaande uit de karakters van s1 terug te geven

  38. 11.3.8. String-methode valueOf • De klasse String voorziet een aantal static klasse-methodes, die argumenten van verschillende types kunnen converteren naar Strings. • Methode valueOf => geeft een nieuwe String terug, die de String-representatie voorstelt van een primitief datatype of ander object.

  39. 1 // Fig. 11.9: StringValueOf.java 2 // String valueOf methodes. 3 import javax.swing.*; 4 5 public class StringValueOf 6 { 7 public static void main( String args[] ) 8 { 9 char charArray[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; 10 boolean booleanValue = true; 11 char characterValue = 'Z'; 12 int integerValue = 7; 13 long longValue = 10000000; 14 float floatValue = 2.5f; 15 double doubleValue = 33.333; 16 Object objectRef = "hello"; // toekenning aan Object referentie 17 18 String output = "char array = " + String.valueOf( charArray ) + 19 "\npart of char array = " +String.valueOf( charArray, 3, 3 ) + 20 "\nboolean = " + String.valueOf( booleanValue ) + 21 "\nchar = " + String.valueOf( characterValue ) + 22 "\nint = " + String.valueOf( integerValue ) + 23 "\nlong = " + String.valueOf( longValue ) + 24 "\nfloat = " + String.valueOf( floatValue ) + 25 "\ndouble = " + String.valueOf( doubleValue ) + 26 "\nObject = " + String.valueOf( objectRef ); 27 28 JOptionPane.showMessageDialog( null, output, 29 "String valueOf methods",JOptionPane.INFORMATION_MESSAGE ); 31 System.exit( 0 ); 32 } 33 } // einde klasse StringValueOf static methode valueOf van klasse String geeft String-voorstelling van verschillende types terug

  40. Oefeningen • Vind het middenste karakter van de string “hottentottententoonstelling”. • Gegeven zijn een voornaam en een achternaam. Druk de initialen van deze naam af. • Ga na of een willekeurig woord een palindroom is.

More Related