380 likes | 548 Views
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.
E N D
Characters and Strings 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. • 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 Characters and Strings
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
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
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
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 typecast the integer. char thirdCharacter = (char) 120; char thirdCharacter = ‘x’; Characters and Strings
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
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); } } Output: AAA Characters and Strings
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'); } } Output: 98ba Characters and Strings
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
Strings stringName Here comes string content. • 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. Characters and Strings
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
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
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. stringName stringName.charAt(3) The variable refers to the whole string The method returns the character at position #3 Characters and Strings
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
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
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
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
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
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
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') ); } } Output: 4 6 4 4 Characters and Strings
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
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
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)); } Characters and Strings
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
Primitive vs. Complex Data Types let A • 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'; Characters and Strings
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
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
Primitive vs. Complex Data Types nameA Rochester String nameA, nameB; nameA = "Rochester"; nameB = nameA; 1008 nameB 2044 nameA 2044 1012 … 2044 R o c h 2048 e s 2052 t e 2056 r 2060 Characters and Strings
Primitive vs. Complex Data Types nameA 2044 nameB Rochester • 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. Characters and Strings
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
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
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
Passing Objects to methods String word1 == word2 is true word1.equals(word2) is true word1 Java : word2 String word1 == word2 is false word1.equals(word2) is true word1 Java : word2 String Java • Sometimes == results in different value than *.equals !!! Characters and Strings
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
StringBuffer • The String class provides string objects that cannot be changed (are immutable). • The StringBuffer class provides mutable objects. Characters and Strings
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 !!!" ); } } } Characters and Strings