Chapter 10 - Strings. In this chapter, the learning objectives are: Learn about literal strings, learn about string constructors and commonly used methods, understand immutability of strings, learn to format numbers into strings and extract numbers from strings, learn several useful methods of the Character class, learn about the StringBuffer class.
Java Methods Object-Oriented Programming and Data Structures 2nd AP edition with GridWorld Maria Litvin ● Gary Litvin "Chapter 10" Strings Copyright © 2011 by Maria Litvin, Gary Litvin, and Skylight Publishing All rights reserved Objectives: • Learn about literal strings • Learn about String constructors and commonly used methods • Understand immutability of strings • Learn to format numbers into strings and extract numbers from strings • Learn several useful methods of the Character class • Learn about the StringBuffer class 102 The String class • An object of the String class represents a string of characters • The String class belongs to the java.lang package, which is built into Java • Like other classes, String has constructors and methods • Unlike other classes, String has two operators, + and += (used for concatenation) 103 Literal Strings • Literal strings are anonymous constant objects of the String class that are defined as text in double quotes • Literal strings don’t have to be constructed: they are “just there.” 104 Literal Strings (cont’d) • can be assigned to String variables • can be passed to methods and constructors as parameters • have methods you can call: String fileName = "fish.dat"; button = new JButton("Next slide"); if ("Start" equals(cmd)) 105 Literal Strings (cont’d) • The string text may include “escape” characters (described in Section 6.5) For example: \\ stands for \ \n stands for newline String s1 = "Biology”; String s2 = "C:\\jdk1.4\\docs"; String s3 = "Hello\n"; 106 Immutability • Once created, a string cannot be changed: none of its methods can change the string • Such objects are called immutable • Immutable objects are convenient because several references can point to the same object safely: there is no danger of changing an object through one reference without the others being aware of the change 107 Immutability (cont’d) • Advantage: more efficient, no need to copy String s1 = "Sun"; String s2 = s1; s1 String s1 = "Sun"; String s2 = new String(s1); s1 "Sun" s2 "Sun" "Sun" s2 OK Less efficient: wastes memory 108 Immutability (cont’d) • Disadvantage: less efficient — you need to create a new string and throw away the old one for every small change String s = "sun"; char ch = Character.toUpperCase(s.charAt (0)); s = ch + s.substring (1); s "sun" "Sun" 109 Empty Strings • An empty string has no characters; its length is String s1 = ""; String s2 = new String(); Empty strings • Not to be confused with an uninitialized string: private String errorMsg; errorMsg is null 1010 Methods — Replacements String s2 = s1.trim (); returns a new string formed from s1 by removing white space at both ends String s2 = s1.replace(oldCh, newCh); returns a new string formed from s1 by replacing all occurrences of oldCh with newCh String s2 = s1.toUpperCase(); String s2 = s1.toLowerCase(); returns a new string formed from s1 by converting its characters to upper (lower) case 1017 Replacements (cont’d) • Example: how to convert s1 to upper case s1 = s1.toUpperCase(); • A common bug: s1.toUpperCase(); s1 remains unchanged 1018 Numbers to Strings • Three ways to convert a number into a string: String s = "" + n; String s = Integer.toString (n); String s = Double.toString (x); Integer and Double are “wrapper” classes from java.lang that represent numbers as objects They also provide useful static methods String s = String.valueOf (n); 1019 Numbers to Strings (cont’d) • The DecimalFormat class can be used for formatting numbers into strings import java.text.DecimalFormat; DecimalFormat money = new DecimalFormat("0.00"); double amt = 56.7381; String s = money.format (amt); 56.7381 "56.74" 1020 Numbers to Strings (cont’d) • Java 5.0 added printf and format methods: int m = 5, d = 19, y = 2007; double amt = 123.5; System.out.printf ( "Date: %02d/%02d/%d Amount = %7.2f\n", m, d, y, amt); String s = String format( "Date: %02d/%02d/%d Amount = %7.2f\n", m, d, y, amt); Displays, sets s to: "Date: 05/19/2007 Amount 123.50" 1021 Numbers from Strings String s1 = "-123", s2 = "123.45"; int n = Integer.parseInt(s1); double x = Double.parseDouble(s2); • These methods throw a NumberFormatException if s does not represent a valid number (integer, real number, respectively) 1022 Numbers from Strings (cont’d) • A safer way: int n; { try { n = Integer.parseInt(s); } catch (NumberFormatException ex) { System.out.println("Invalid input, reenter"); } } while ( ); 1023 Character Methods • java.lang.Character is a “wrapper” class that represents characters as objects • Character has several useful static methods that determine the type of a character (letter, digit, etc.) • Character also has methods that convert a letter to the upper or lower case 1024 Character Methods (cont’d) if (Character.isDigit (ch)) isLetter isLetterOrDigit isUpperCase isLowerCase Whitespace is space, tab, newline, etc .isWhitespace return true if ch belongs to the corresponding category 1025 Character methods (cont’d) char ch2 = Character.toUpperCase (ch1); toLowerCase (ch1); if ch1 is a letter, returns its upper (lower) case; otherwise returns ch1 int d = Character.digit (ch, radix); returns the int value of the digit ch in the given int radix char ch = Character.forDigit (d, radix); returns a char that represents int d in a given int radix 1026 The StringBuffer Class • Represents a string of characters as a mutable object • Constructors: StringBuffer() // empty StringBuffer of the default capacity StringBuffer(n) // empty StringBuffer of a given capacity StringBuffer(str) // converts str into a StringBuffer • Adds setCharAt, insert, append, and delete methods • The toString method converts this StringBuffer into a String 1027 Review: • What makes the String class unusual? • How can you include a double quote character into a literal string? • Is "length".length() allowed syntax? If so, what is the returned value? • Define immutable objects • Does immutability of Strings make Java more efficient or less efficient? 1028 Review (cont’d): • How you declare an empty string? • Why are String constructors not used very often? • If the value of String city is "Boston", what is returned by city.charAt (2)? By city.substring(2, 4)? • How come String doesn’t have a setCharAt method? • Is s1 += s2 the same as s1 = s1 + s2 for strings? 1029 Review (cont’d): • What the indexOf methods do? Name a few overloaded versions • What is more efficient for strings: == and other relational operators or equals and compareTo methods? • What does the trim method do? • What does s.toUpperCase() to s? • What does the toString method return for a String object? 1030 Review (cont’d): • Name a simple way to convert a number into a string • Which class has a method for converting a String into an int? • Name a few Character methods that help identify the category to which a given character belongs • What is the difference between the String and StringBuffer classes? 1031 ... s1 matches s2, case-blind int diff = s1.compareTo(s2); returns the “difference” s1 - s2 int diff = s1.compareToIgnoreCase(s2); returns the “difference” s1 - s2, case-blind 10? ?16 Methods — Replacements... confused with an uninitialized string: private String errorMsg; errorMsg is null 10? ?10 Constructors • String’s no-args and copy constructors are not used much String s1 = new String (); String s1... constructors convert arrays (Chapter 12) into strings 10? ?11 Methods — length, charAt int length (); char charAt (k); • Returns the number of • characters in the string Returns the k-th char Character positions