characters and strings

37
Characters and Strings 1 Vladimir Misic: vm@cs.rit.edu http://www.cs.rit.edu/~vm Tuesday, 9:39 AM Characters and Strings

Upload: valentine-newman

Post on 30-Dec-2015

73 views

Category:

Documents


0 download

DESCRIPTION

Characters and Strings. Characters. *Digression:. 00000000 01000001. 16 bits. 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

Page 2: 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:

Page 3: Characters and Strings

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’

Page 4: Characters and Strings

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”);

Page 5: Characters and Strings

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

Page 6: Characters and Strings

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

Page 7: Characters and Strings

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'

Page 8: Characters and Strings

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:

Page 9: Characters and Strings

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:

Page 10: Characters and Strings

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“

Page 11: Characters and Strings

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

Page 12: Characters and Strings

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.

Page 13: Characters and 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"?

Page 14: Characters and Strings

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

Page 15: Characters and Strings

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.

Page 16: Characters and Strings

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.

Page 17: Characters and Strings

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.

Page 18: Characters and Strings

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.

Page 19: Characters and Strings

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

Page 20: Characters and Strings

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.

Page 21: Characters and Strings

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:

Page 22: Characters and Strings

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.

Page 23: Characters and Strings

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.

Page 24: Characters and Strings

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

Page 25: Characters and Strings

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.

Page 26: Characters and 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

Page 27: Characters and Strings

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.

Page 28: Characters and Strings

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.

Page 29: Characters and Strings

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

Page 30: Characters and Strings

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

Page 31: Characters and Strings

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!

Page 32: Characters and Strings

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.

Page 33: Characters and Strings

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 !!!

Page 34: Characters and Strings

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

Page 35: Characters and Strings

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.

Page 36: Characters and Strings

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.

Page 37: Characters and Strings

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