0% found this document useful (0 votes)
20 views

Characters and Strings

This document discusses characters, strings, and formatting strings in Java. It covers: 1. Characters are represented using Unicode in Java. The char type is 2 bytes. Java does not use Unicode for file I/O by default. 2. Useful Character class methods like isLetter(), toLowerCase(), getNumericValue(). 3. Converting a string to a char array allows processing each character. StringBuilder/StringBuffer are better than "+" for building strings efficiently.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Characters and Strings

This document discusses characters, strings, and formatting strings in Java. It covers: 1. Characters are represented using Unicode in Java. The char type is 2 bytes. Java does not use Unicode for file I/O by default. 2. Useful Character class methods like isLetter(), toLowerCase(), getNumericValue(). 3. Converting a string to a char array allows processing each character. StringBuilder/StringBuffer are better than "+" for building strings efficiently.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 14

CHARACTERS AND

STRINGS
CHARACTERS
 Java uses Unicode to represent characters.
 char is 2-bytes.
 Java does not use Unicode for reading/writing to files unless
you tell it to.

char c = 'A';
char at = '@';
char z = 'a'+25; // 'z', increment using int
int n = 'A'; // n = 65
USEFUL CHARACTER
c is a char:
METHODS
boolean Character.isLetter( c )
boolean Character.isDigit( c )
boolean Character.isLetterOrDigit( c )
boolean Character.isLowerCase( c )
char Character.toLowerCase( c )
char Character.toUpperCase( c )
boolean Character.isWhitespace( c )
int Character.getNumericValue( '3' ) --> 3
USEFUL CHARACTER
METHODS
String message = "I am trapped in a computer";
char [ ] c = message.toCharArray( );
// c[0]='I', c[1]=' ', c[2]='a', c[3]='m' ...
// count the letters and digits
int letters = 0;
int digits = 0
for(int k=0; k < c.length; k++ ) {
/* c[k] is letter */
if ( Character.isLetter(c[k]) ) letters++;
/* c[k] is a digit 0 ... 9 */
else if ( Character.isDigit(c[k]) ) digits++;
else /* something else */;
}
USEFUL STRING METHODS
string.indexOf( char ) returns the position of char in the String.
-1 if char is not found in string.

String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";


char c = 'G';
int n = ALPHABET.indexOf( c ); // = 7

string.length( ) returns the length of the String.

String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";


int n = ALPHABET.length( ); // = 26

string.charAt( k ) returns the character at position k (starts at k = 0)


String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ALPHABET.charAt( 3 ); // = 'd'
USEFUL STRING
COMPARISONS
a.equalsIgnoreCase(b) returns true if a and b have same value,
ignoring case of letters.

String answer = console.next();

if (answer.equalsIgnoreCase("yes")) ...

a.compareTo(b) lexical comparison of strings

if ("cat".compareTo("dog") < 0)
print("cat comes before dog");

a.compareToIgnoreCase(b) like compareTo ignoring case of letters

if ("cat".compareToIgnoreCase("DOG") < 0)
print("cat comes before DOG");
STRING TOCHARARRAY
Problem:
You want to process each character in a string.
Solution:
convert String to a character array
process each character
make a new string from the result

String message = "I am trapped in a computer";


// convert String to array of char
char [] c = message.toCharArray( );
// process each character:
for(k=0; k< c.length; k++) c[k] = ...;
// put the result in a new String
String result = new String( c );
HOW TO CREATE A

FORMATTED
You can format output using:
STRING
System.out.printf( "format string", arg1, arg2, ...);
 Example:
System.out.printf("p = (%5.2f,%5.2f)\n", x, y);
for x = 12.345, y = 11.519, this prints:
p = (12.34,11.52)
 System.out.printf( ) is an alias for System.out.format( ) which uses the
java.util.Formatter class to format output.
 See Javadoc for Formatter for complete list of format codes and examples.
USING FORMATTER OBJECTS
 Suppose we have a Point class for 2-dimensional points. We want
toString( ) to return a nicely formatted "(x,y)" for the point's coordinates.

private double x, y; // coordinates of the point

Formatter result = new Formatter( );


// use the format( ) method like printf( )
result.format("(%.2f, %.2f)", x, y );
// convert result to a String and return it
String s = result.out( ).toString( );

// Easier
String s = String.format("(%.2f, %.2f)", x, y);
FORMATTER METHODS
format("format string", obj1, ...)
format the objects using the format string and append to the format
object's Appendable attribute.
out( )
return the contents of the Formatter object as an Appendable object.
out( ).toString( )
convert the contents of the Formatter object to a String.

Appendable is a Java 1.5 interface for character sequences that can


be appended to. Classes the implement Appendable are
StringBuffer, StringBuilder, CharBuffer, PrintStream, StringWriter, ...
The String class is not Appendable ! (Strings are immutable.)
STRING TYPES
There is more than one way to store a String.
If you want to append to or modify a String, use a
StringBuilder or StringBuffer.
STRING IS IMMUTABLE
You can't change a String after it is created.

String s = "hello";
s = s + " there";
// "+" creates a new string. Old string is now garbage.
s = s + " class";
// "+" creates another new String. Old string is garbage.
s = s.toLowerCase( );
// creates yet another new String

Lesson: using "+" to build strings is slow and inefficient.


Can be an issue in web apps that create HTML as strings.
STRINGBUFFER IS A

MUTABLE STRING
StringBuffer and StringBuilder are two classes that "build" strings.
 You can modify and append to them.

StringBuilder sb = new StringBuilder( );


sb.append("hello"); // append to same buffer
sb.append(" there"); // doesn't create new objects
sb.append(" class");
// now we are done. Convert to a String for output or return
String s = sb.toString;
STRINGBUFFER OR
STRINGBUILDER?
 StringBuilder and StringBuffer are nearly the same.

 StringBuffer is thread safe, StringBuilder is not.

 Being "thread safe" makes StringBuffer slightly slower.

 For a single threaded application, prefer StringBuilder.

You might also like