Characters and Strings
-
Upload
valentine-newman -
Category
Documents
-
view
58 -
download
0
description
Transcript of Characters and Strings
Characters and Strings 1
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters and Strings
Characters and Strings 2
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
• The data type char represents a single character in Java.– Character values are written as a symbol: 'a', ')', '%', 'A', etc.
– A char value in Java is really represented as an integer. • Each character has an associated 16-bit integer value*.
0* 215 + …………. + 0* 27 + 1* 26 + 0* 25 + 0* 24 + 0* 23 + 0*22 + 0*21 + 1*20
…
00000000 0100000116 bits
*Digression:
Characters and Strings 3
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
– So: a char value in Java is really represented as an integer. Thus:
– The integer value associated with the character is based upon a code.• The ASCII code represents 256 characters including all upper and lower
case English letters, the numbers between 0 and 9, punctuation, and some unprintable characters.
• ASCII is a subset of the UNICODE character set.
• The UNICODE character set contains 34,168 distinct characters.– The major languages from the Americas, Europe, Middle East, Africa,
India, Asia, and Pacifica are represented.
– Unicode (16 bits) support for every character in the world: ‘\u0000’ to ‘\uFFFF’
Characters and Strings 4
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
• The printable ASCII characters include tabs, new lines, carriage return, single and double quote.
– New line = '\n'– Tab = '\t'– Carriage return = '\r'– Single quote = '\''– Double quote = '\ "‘
System.out.println(“Line one \nLine two”);
Characters and Strings 5
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Non-printable Characters
• There are also characters contained in ASCII that are not printable.
– Bell tone = bel (ASCII 7)
– Characters 0 to 32 are non-printable characters.
– Character 127 (delete) is also non-printable character
Characters and Strings 6
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
• To define a character use the char data type.
char firstChar = 'a', secondChar = 'A';
Notice that two integers are declared and initialized on the same lane.
• To convert an integer into a character you can type cast the integer.
char thirdCharacter = (char) 120;
char thirdCharacter = ‘x’;
Characters and Strings 7
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
• You can print a char as an integer using type casting.
System.out.println( (int) 'C');
Output: 67
• Comparing characters is done based upon their integer representation.
True or false? 'c' < 'C'
True or false? '1' < '4'
Characters and Strings 8
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
import java.io.* ;
public class CharString { public static void main( String args[] ) {
System.out.println('A');System.out.println('\u0041');System.out.println((char)65);
}}
import java.io.* ;
public class CharString { public static void main( String args[] ) {
System.out.println('A');System.out.println('\u0041');System.out.println((char)65);
}}
AAA
AAA
Output:
Characters and Strings 9
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
import java.io.* ;
public class CharString { public static void main( String args[] ) {
int a = 98;
System.out.println(a);System.out.println((char)a);System.out.println('a');
}}
import java.io.* ;
public class CharString { public static void main( String args[] ) {
int a = 98;
System.out.println(a);System.out.println((char)a);System.out.println('a');
}}
98ba
98ba
Output:
Characters and Strings 10
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Strings
• A string is composed of individual characters that are treated as a single unit. – The individual characters 'h', 'e', 'l', 'l', and 'o' are combined
into the string "hello".
• A string may contain letters, digits, and special characters such as +, -, etc.
• String Examples:– "My name is Matilda."– "1 + 2 = 3“
Characters and Strings 11
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Strings
• The data type of a string is String.– The capital S of String indicates that this data type is not a primitive
data type.
– In fact, String is a complex data type.
• When an individual string is created, it is an object of type String.
Here comes string content.
Here comes string content.
stringName
Characters and Strings 12
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
String Constructors
• Java provides various string constructors.
• Assume String s1; (What’s the value of s1 so far?)– s1 = new String( );
• This creates a string of length zero with no characters.
– s1 = new String( s );• This creates a string that is a copy of the characters stored in String s that
is passed to the constructor.
– s1 = "This is a string";• This is a special shortcut constructor, ONLY available to Strings.
Characters and Strings 13
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Strings
• Each character of a String has an associated index. – The first letter of a string has an index of zero (0), the second letter
has an index of one (1), … the last letter has an index of (string length – 1).
– What is the string length of "hello"?
– What is the index of the second 'l' in the word "hello"?
Characters and Strings 14
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
String Methods
• The length of a string can be found by: – stringName.length();
• The first element of a string is always zero.
• A character at a specific position can be found by:– stringName.charAt( 3 );
• Where 3 is an index into the string.
0 1 2 3 4 5 6
S u m a t r a
stringName.charAt(3)stringName
The variable refers to the whole string
The variable refers to the whole string The method returns the
character at position #3
The method returns the character at position #3
Characters and Strings 15
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Strings
• Strings are immutable !!!
• Once you create a string and initialize it you can not change the string. – You can assign a new string to the string variable.
• The original string is lost (will be handled by the java garbage collection process.
– You can not add new characters or remove existing characters.
Characters and Strings 16
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Changing Case
• To change the case of characters in a string:– stringName.replace( 'l', 'L' );
• This returns a String with all characters 'l' in the String replaced by 'L'. If there are no 'l's in the String, the original string is returned.
– stringName.toUpperCase( );• This will return a String with all lower case letters to capital letters.
– stringName.toLowerCase( );• This will return a String with all capital letters to lower case letters.
Characters and Strings 17
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
String Comparison
• Are two strings equal to one another?– stringName1.equals( stringName2 );
• The result is true if the two strings are the same and false if the two strings are different.
• Capital and Lower case letters are considered to be different.
– stringName1 == stringName2;• The result is only true if stringName1 and stringName2 both refer to
the same object in memory.
Characters and Strings 18
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
String Comparison
• You can ignore the case of letters during comparison using: – stringName1.equalsIgnoreCase( StringName2 );
• That means that "hello" is equal to "HELLO"
• You can also compare strings using– stringName1.compareTo( StringName2 );
• This comparison returns 0 if the strings are equal, a negative number if stringName less than stringName2, and a positive number if stringName greater than stringName2.
Characters and Strings 19
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
String Comparison
• To compare portions of two strings:– stringName1.regionMatches( 0, StringName2, 0, 5 );
• The first parameter 0 is the starting index in stringName1, the third parameter is the starting index in stringName2, and the last argument is the number of characters to compare.
• This method returns true only if the members compared are equal.– "ello" == "ello" but "ello" != "Ello“
– stringNam1e.regionMatches( true, 0, StringName2, 0, 5 );• Here, the true says we want to ignore case
Characters and Strings 20
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Locating Characters and Substrings
• indexOf can be used to find characters in strings.
– stringName.indexOf( (int) 'a' );• This returns the index of the first ‘a’ in the string if it is found. If it is
not found the result is -1.
– stringName.indexOf( (int) 'a', 2 );• This is similar to the first except the second parameter specifies
which index of the string the search should begin.
– stringName.indexOf( "a" );• This is the same as the first except the parameter is a String rather
than an int.
Characters and Strings 21
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Characters
import java.io.* ;
public class CharString { public static void main( String args[] ) {
String s = "Vladimir";System.out.println( s.indexOf((int) 'i') );System.out.println( s.indexOf((int) 'i',5) );System.out.println( s.indexOf("i") );System.out.println( s.indexOf('i') ); }
}
import java.io.* ;
public class CharString { public static void main( String args[] ) {
String s = "Vladimir";System.out.println( s.indexOf((int) 'i') );System.out.println( s.indexOf((int) 'i',5) );System.out.println( s.indexOf("i") );System.out.println( s.indexOf('i') ); }
}
4644
4644
Output:
Characters and Strings 22
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Extracting Substrings
• Methods to get substrings out of strings are:– stringName.substring( 10 );
• This returns the string that begins at index 10 and ends at the end of the original string.
– stringName.substring( 10, 15 );• This returns the string that begins at index 10 and ends at one index
before 15.
Characters and Strings 23
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Concatenating Strings
• We have already used string concatenation with:– "this is a string" + stringName
• To concatenate two string variables:– stringName3 = stringName1.concat( stringName2 );
• This returns the second string added to the end of the first string.
Characters and Strings 24
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Name.java
public class Name { public static void main( String args[] ) { String name; int midLoc;
name = "Nan"; name = name.concat( " Schaller" );
midLoc = name.indexOf( " " ); name = name.substring( 0, midLoc ) + " Carol" + name.substring( midLoc );
System.out.println( name );
// Print out first name, a character per line for (int i=0; i<name.length() && name.charAt(i) != ' '; i++ ) { System.out.println( name.charAt(i) ); } }}
There is a simpler way to write this:
for(int i=0; i<midLoc; i++) { System.out.println(name.charAt(i));}
There is a simpler way to write this:
for(int i=0; i<midLoc; i++) { System.out.println(name.charAt(i));}
Characters and Strings 25
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Other String Methods
• Using the Javadoc documentation you can learn about the many other String methods.
– Methods for comparing regions of strings.
– Converting variables of other data types to strings.
Characters and Strings 26
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Primitive vs. Complex Data Types
• When you define a primitive data type (int, char, double, bool) the memory location is allocated.
– The number of bytes is always the same to store a value.
– char let = 'A';
let A
Characters and Strings 27
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Primitive vs. Complex Data Types
• A complex data type is a data type defined by a class.
• – String is an example of a complex data type.
– Complex data types usually begin with a capital letter.
– The amount of storage required for a complex data type varies depending upon how large the actual values are.
– Complex data types are also called reference data types.
Characters and Strings 28
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Primitive vs. Complex Data Types
• When we define a String a memory location is allocated to hold a reference to the actual location of the information.
– The reference is the location of the first item in memory.
– The information is stored sequentially beginning at the reference location.
Characters and Strings 29
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Primitive vs. Complex Data Types
String nameA, nameB;
nameA = "Rochester";
nameB = nameA;
String nameA, nameB;
nameA = "Rochester";
nameB = nameA;
nameA 2044 1012…
2044
2048R oc h
e s
t e
r
2052
2056
2060
nameB 2044 1008
nameA
Rochester
Characters and Strings 30
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Primitive vs. Complex Data Types
• If we define another string and assign it equal to name then they will both point to the same location in memory. string nameB = nameA;
– Now nameA and nameB both point to memory location 2044.
nameA
Rochester
nameB2044
Characters and Strings 31
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Passing Primitive Data to Methods
• If a program passes a variable that has a primitive data type to a method, the actual value is passed using call-by-value.
– The advantage is that the original value can not be modified by the method.
– The disadvantage is that a copy of the original value is made, this requires more memory.
– In fact, Java always passes method arguments by value!• Even if variables are reference types.
• I’ll try to explain this – hope you’ll get it!
Characters and Strings 32
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Passing Objects to methods
• When we pass a String to a method we are passing it using call-by-reference mechanism.– This means that we do not pass the actual string, we are passing the
contents of the memory location that holds the reference (address) to the actual string.
• A problem associated with call-by-reference is that the original object may be modified.
• All objects (both Java defined and user defined) are passed using call-by-reference.
Characters and Strings 33
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Passing Objects to methods
• Some of the String methods require a String as a parameter to the method.– For example, stringName1.equals(stringName2);– The method definition requires a String object to be passed to the
method equals.
– Sometimes == results in different value than stringName1.equals(stringName2);
– When? We want some example !!!
Characters and Strings 34
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Passing Objects to methods
• Sometimes == results in different value than *.equals !!!
word2
word1
:
StringString
Java
word1 == word2 is true
word1.equals(word2) is true
word2
word1
:
StringString
Java
word1 == word2 is false
word1.equals(word2) is true
StringString
Java
Characters and Strings 35
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Returning Things from Methods
• When a method returns an object, a memory reference is really returned. – Not the actual data.
• When a method returns a primitive data type, then the actual value is returned.
Characters and Strings 36
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
StringBuffer
• The String class provides string objects that cannot be changed (are immutable).
• The StringBuffer class provides mutable objects.
Characters and Strings 37
Vla
dim
ir M
isic
: vm
@cs
.rit
.edu
http://www.cs.rit.edu/~vmTuesday, 9:39 AM
Palindrome
// This program checks a given string to see if it is a palindrome
public class Palin { public static void main( String args[] ) { String original = "mom", reverse = "";
// Reverse it
for (int i=0; i<original.length(); i++) { reverse = original.charAt( i ) + reverse; }
// Now check it ( note that orig == reverse does not work )
if (original.equalsIgnoreCase(reverse)) { System.out.println( "Palindrome" ); } else { System.out.println( "Not a palindrome !!!" ); } }}