Upload
colin-underwood
View
218
Download
2
Embed Size (px)
Citation preview
Strings
Java MethodsJava MethodsA & ABA & AB
Object-Oriented Programmingand Data Structures
Maria Litvin ● Gary Litvin
Copyright © 2006 by Maria Litvin, Gary Litvin, and Skylight Publishing. All rights reserved.
"Chapter 10"
10-2
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
10-3
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).
10-4
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.”
10-5
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)) ...
10-6
Literal Strings (cont’d)
• The string text may include “escape” characters (described in Section 6.5). For example: \\ stands for \ \n stands for the newline character
String s1 = "Biology”;String s2 = "C:\\jdk1.4\\docs";String s3 = "Hello\n";
10-7
Immutability
• Once created, a string cannot be changed: none of its methods changes 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.
10-8
Immutability (cont’d)
• Advantage: more efficient, no need to copy.
String s1 = "Sun"; String s2 = s1;
String s1 = "Sun"; String s2 = new String(s1);
s1
s2
s1
s2
OK Less efficient: wastes memory
"Sun""Sun"
"Sun"
10-9
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"
10-10
Empty Strings
• An empty string has no characters; its length is 0.
• Not to be confused with an uninitialized string:
String s1 = ""; String s2 = new String();
private String errorMsg; errorMsg is null
Empty strings
10-11
Constructors
• String’s no-args and copy constructors are not used much.
• Other constructors convert arrays into strings (Chapter 12)
String s1 = new String ();
String s2 = new String (s1);
String s1 = "";
String s2 = s1;
10-12
Methods — length, charAtint length ();
char charAt (k);
• Returns the number of characters in the string
• Returns the k-th char
6
’n'
”Flower".length();
”Wind".charAt (2);
Returns:
Character positions in strings are numbered starting from 0
10-13
Methods — substringString s2 = s.substring (i, k);
returns the substring of chars in positions from i to k-1
String s2 = s.substring (i);
returns the substring from the i-th char to the end
"raw""happy""" (empty string)
”strawberry".substring (2,5); "unhappy".substring (2);"emptiness".substring (9);
Returns:
strawberry
i k
strawberry
i
10-14
Methods — Concatenation
String result = s1 + s2;concatenates s1 and s2
String result = s1.concat (s2);the same as s1 + s2
result += s3;concatenates s3 to result
result += num;converts num to String and concatenates it to result
10-15
Methods — Find (indexOf)
String date ="July 5, 2012 1:28:19 PM";
date.indexOf ('J'); 0
date.indexOf ('2'); 8
date.indexOf ("2012"); 8
date.indexOf ('2', 9); 11
date.indexOf ("2020"); -1
date.lastIndexOf ('2'); 15
Returns:
(not found)
(starts searching at position 9)
0 8 11 15
10-16
Methods — Comparisonsboolean b = s1.equals(s2);
returns true if the string s1 is equal to s2
boolean b = s1.equalsIgnoreCase(s2);returns true if the string 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-17
Methods — ReplacementsString 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
10-18
Replacements (cont’d)
• Example: how to convert s1 to upper case
• A common bug:
s1 = s1.toUpperCase();
s1.toUpperCase(); s1 remains unchanged
10-19
Numbers to Strings
• Three ways to convert a number into a string:1.
String s = "" + num;
2.
String s = Integer.toString (i);
String s = Double.toString (d);
3.
String s = String.valueOf (num);
Integer and Double are “wrapper” classes from java.lang that represent numbers as objects. They also provide useful static methods.
10-20
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"
10-21
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"
10-22
Numbers from Strings
• These methods throw a NumberFormatException if s does not represent a valid number (integer, real number, respectively).
String s1 = "-123", s2 = "123.45";
int n = Integer.parseInt(s1);
double x = Double.parseDouble(s2);
10-23
Numbers from Strings (cont’d)
• A safer way:
int n;do { try { n = Integer.parseInt(s); } catch (NumberFormatException ex) { System.out.println("Invalid input, reenter"); }} while (...);
10-24
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.
10-25
Character Methods (cont’d)if (Character.isDigit (ch)) ...
.isLetter...
.isLetterOrDigit...
.isUpperCase...
.isLowerCase...
.isWhitespace...
return true if ch belongs to the corresponding category
Whitespace is space, tab, newline, etc.
10-26
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
10-27
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
10-28
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?
10-29
Review (cont’d):• How do 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?
10-30
Review (cont’d):
• What do 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() do to s?
• What does the toString method return for a String object?
10-31
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?