Title: Characters, Strings and the String Buffer
1Characters, Strings and the String Buffer
2Identifying problems that can occur when you
manipulate string data
- String is not a simple data type like int, float,
or double - String creates an instance of a class, the class
String - As such it contains a reference or an address and
not the actual string - So you cannot do equality comparisons of two
different instances of String, because you are
simply testing if the addresses are the same
3An example of incorrect code
- import javax.swing.JOptionPane
- public class TryToCompareStrings
-
- public static void main(String args)
-
- String aName "Carmen"
- String anotherName
- anotherName JOptionPane.showInputDialog(nu
ll, - "Enter your name")
- if(aName anotherName)
- JOptionPane.showMessageDialog(null,
aName - " equals " anotherName)
- else
- JOptionPane.showMessageDialog(null,
aName - " does not equal " anotherName)
- System.exit(0)
-
4Correct Code
- import javax.swing.JOptionPane
- public class CompareStrings
-
- public static void main(String args)
-
- String aName "Carmen"
- String anotherName
- anotherName JOptionPane.showInputDialog(nu
ll, - "Enter your name")
- if(aName.equals(anotherName))
- JOptionPane.showMessageDialog(null,
aName - " equals " anotherName)
- else
- JOptionPane.showMessageDialog(null,
aName - " does not equal " anotherName)
- System.exit(0)
-
5Three classes for working with strings
- Charactera class whose instances can hold a
single character valueprovides methods that can
manipulate or inspect single-character data - Stringa class for working with fixed-string
datathat is unchanging data composed of multiple
characters, strings that are immutable - StringBuffera class for storing and manipulating
changeable data composed of mulltiple characters
6Manipulating Characters
- We know the char data type can hold any single
character - Character class provides the following methods
- isUpperCase(), toUpperCase(), isLowerCase(),
toLowerCase(), isDigit(), isLetter(),
isLetterOrDigit(), isWhitespace() - Methods that begin with is perform tests
delivering true or false values - Methods that begin with to perform conversions
7Declaring a String Object
- We know that characters enclosed within double
quotation marks are literal strings - Weve learned to print these strings using
println() and showMessageDialog() - An literal string is an unnamed object, or
anonymous object, of the String class - A String variable is simply a named object of the
same class. - The class String is defined in java.lang.String,
which is automatically imported into every
program you write
8Declaring a String variable
- When you declare a String variable, the String
itselfthat is, the series of characters
contained in the Stringis distinct from the
variable you use to refer to it. - Can initialize a String variable with or without
a String constructor
9With or without a String Constructor
- With the constructor
- String aGreeting new String(Hello)
- Without the constructor
- String aGreeting Hello
- Unlike other classes, you can create a String
object without using the keyword new or
explicitly calling the class constructor
10Comparing String Values
- Consider the following two statements
- String aGreeting hello
- aGreeting Bonjour
- These statements are syntactically correct. What
happens is that the address contained in
aGreeting is changed to point to Bonjour rather
than hello, both of which are contained at
different locations in memory. Eventually, the
garbage collector discards the hello characters.
11Comparing String Values
- The String class provides methods for comparing
strings - In the example above the sign is comparing
memory addresses, not the actual strings. - The String class equals() method evaluates the
contents of two String objects to determine if
they are equivalent.
12- Import javax.swing.JOptionPane
- Public class CompareStrings
-
- public static void main(String args)
-
- String aName Carmen, anotherName
- anotherName JOptionPane. showInputDialog(null
, Enter your name) - if(aName.equals(anotherName))
- JOptionPane.showMessageDialog(null, aName
equals anotherName) - else
- JOptionPane.showMessageDialog(null, aName
does not equal anotherName)) - System.exit(0)
-
13The equals() method
- From the code above, we can see that the equals()
method returns a Boolean value of true or false
14equalsIgnoreCase() Method
- Similar to the equals() method
- Ignores case
- String aName Roger
- If(aName.equalsIgnoreCase(roGER))
- evaluates to true
15compareTo() method
- Returns an integer that is the numeric difference
between the first two non-matching characters
16(No Transcript)
17Using other String Methods
- toUpperCase() and toLowerCase() convert any
String to its uppercase and lowercase equivalent - Length() returns the length of a String
18- import javax.swing.
- public class BusinessLetter
-
- public static void main(String args)
-
- String name
- String firstName ""
- String familyName ""
- int x
- char c
- name JOptionPane.showInputDialog(null,
- "Please enter customer's first and last
name") - x 0
- while(x lt name.length())
-
- if(name.charAt(x) ' ')
-
- firstName name.substring(0, x)
- familyName name.substring(x 1,
name.length())
19- x 0
- while(x lt name.length())
-
- if(name.charAt(x) ' ')
-
- firstName name.substring(0, x)
- familyName name.substring(x 1,
name.length()) - x name.length()
-
- x
-
20(No Transcript)
21Concatenation
- You know you can concatenate strings to strings
as in System.out.println(firstName
lastName)
22Concatenationnumbers to strings by using
- The following is permissible
- Int myAge 25
- String aString My age is myAge
- Another example would be
- String anotherString
- float someFloat 12.34f
- anotherString someFloat
23Concatenation by using the toString() method
- String theString
- Int someInt 10
- theString Integer.toString(someInt)
- String aString
- double someDouble 8.25
- aString Double.toString(someDouble)
24Converting Strings to Numbers
- Use a wrapper like the Integer class which is a
part of java.lang - A wrapper is a class that is wrapped around a
simpler element - Int anInt Integer.parseInt(649) stores the
value 649 in the variable anInt
25- public class TestCharacter
-
- public static void main(String args)
-
- char aChar 'C'
- System.out.println("The character is "
aChar) - if(Character.isUpperCase(aChar))
- System.out.println(aChar " is
uppercase") - else
- System.out.println(aChar " is not
uppercase") - if(Character.isLowerCase(aChar))
- System.out.println(aChar " is
lowercase") - else
- System.out.println(aChar " is not
lowercase") - aChar Character.toLowerCase(aChar)
- System.out.println("After toLowerCase(),
aChar is " aChar) - aChar Character.toUpperCase(aChar)
- System.out.println("After toUpperCase(),
aChar is " aChar) - if(Character.isLetterOrDigit(aChar))
26Test Character App
- public class TestCharacter
-
- public static void main(String args)
-
- char aChar 'C'
- System.out.println("The character is "
aChar) - if(Character.isUpperCase(aChar))
- System.out.println(aChar " is
uppercase") - else
- System.out.println(aChar " is not
uppercase") - if(Character.isLowerCase(aChar))
- System.out.println(aChar " is
lowercase") - else
27- System.out.println(aChar " is not lowercase")
- aChar Character.toLowerCase(aChar)
- System.out.println("After toLowerCase(),
aChar is " aChar) - aChar Character.toUpperCase(aChar)
- System.out.println("After toUpperCase(),
aChar is " aChar) - if(Character.isLetterOrDigit(aChar))
- System.out.println(aChar " is a letter or
digit") - else
- System.out.println(aChar " is neither a
letter nor a digit") - if(Character.isWhitespace(aChar))
- System.out.println(aChar " is
whitespace") - else
- System.out.println(aChar " is not
whitespace") -
-
28Learning about the StringBuffer Class
- Some strings are not constants, not immutable
- String someChars Goodbye
- someChars Goodbye Everybody
- someChars Goodbye Everybody
- You cannot change the string Goodbye
- To overcome these limitations, you can use the
StringBuffer class - The StringBuffer class was invented to
accommodate strings that are not immutable
(constants)
29The StringBuffer Class
- Uses a buffer that is much larger than any one
string actual size of the buffer is the capacity - Provides methods that can change individual
characters within a string - Must initialize StringBuffer objects as follows
- StringBuffer eventString new StringBuffer(Hello
there) - Cannot use StringBuffer eventString Hello
there
30Methods in the StringBuffer Class
- setLength() will change the length of a String in
a StringBuffer object - capacity() will find the capacity of an object
- Has four constructors
- public StringBuffer() constructs a StringBuffer
with no characters and a default size of 16
characters - public StringBuffer(int Capacity) creates a
StringBuffer with no characters and a capacity
defined by the parameter - public StringBuffer(String s) contains the same
characters as those stored in the String object s
31Still more methods in the StringBuffer Class
- Append() lets you add characters to the end of a
StringBuffer object - Insert() lets you add characters at a specific
location within a StringBuffer object - StringBuffer someBuffer new StringBuffer(Happy
Birthday) - someBuffer.insert(6,30th )
- Produces Happy 30th Birthday
32Still more methods in StringBuffer
- setCharAt() method allows you to change a single
character at a specified location - someBuffer.setCharAt(6,4)
- Changes someBuffer to Happy 40th Birthday
- Can use charAt() method will return the character
at an offset number of positions from the first
character - StringBuffer text new StringBuffer(Java
Programming) - Then text.charAt(5) returns the character P.
33- package Strings
- import javax.swing.
- public class RepairName
- /
- _at_param args
- /
- public static void main(String args)
-
- String name, saveOriginalName
- int stringLength
- int i
- char c
- name JOptionPane.showInputDialog(null, "Please
enter your first and last name") - saveOriginalName name
- stringLength name.length()
- for (i0 i lt stringLength i)
-
- c name.charAt(i)