Sie sind auf Seite 1von 22

Characters, Strings and the

String Buffer
Jim Burns

Identifying 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

Three 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 data
that is unchanging data composed of multiple
characters, strings that are immutable
StringBuffera class for storing and
manipulating changeable data composed of
mulltiple characters

Manipulating 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

Declaring a String Object


We

know that characters enclosed within double


quotation marks are literal strings
Weve learned to print these strings using
println()
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

Declaring 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

With 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

Comparing 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.

Comparing 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.

compareTo() method
Returns an integer that is the numeric
difference between the first two nonmatching characters

Using other String Methods


toUpperCase()

and toLowerCase() convert


any String to its uppercase and lowercase
equivalent
Length() returns the length of a String

Concatenation
You

know you can concatenate strings to


strings as in System.out.println(firstName
+ + lastName);

Concatenationnumbers 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;

Converting 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

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))
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");
}
}

//see next slide

Test 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

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");
}
}

Learning 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)

The 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;

Methods 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

Still 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

Still 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.