6. FREQUENTLY ASKED QUESTIONS FAQ
• What is string ?
• Why string is final?
• What are the ways to declare and initialize the String Object?
• What is the difference b/w Reference values and literal strings?
• What is the difference b/w + opretor and concat() method?
• What is the effect when comparing strings with == and equals() ?
• What is Difference b/w String class and String Buffer?
• What is String pool in Java?
• What does intern() method do in Java?
• Why String is thread-safe in Java?
• What is the difference b/w System.out.println(1+2+” text”) and
System.out.println(” text”+1+2) ?
7. WHAT IS STRING?
• String is:
• A sequence of characters
• Each character is a Unicode character
• Represented by the String (java.lang.String) data type in Java
• Example:
String s = "Hello, Java";
s H e l l o , J a v a
8. JAVA.LANG.STRING
• We use java.lang.String to work with strings in Java
• String objects contain an immutable (read-only) sequence of characters
• Use Unicode in order to support multiple languages and alphabets
• Stores strings in the dynamic memory (managed heap)
• java.lang.String is class
• It is reference type
9. JAVA.LANG.STRING
• String objects are like arrays of characters (char[])
• Have fixed length (String.length())
• Elements can be accessed by index
• Using charAt() method
• The index is in the range 0...length()-1
String s = "Hello!";
int len = s.length(); // len = 6
char ch = s.charAt(1); // ch = 'e‘`
index = 0 1 2 3 4 5
s.charAt(index) = H e l l o !
10. STRINGS – FIRST EXAMPLE
String s = "Stand up, stand up, Balkan superman.";
System.out.printf("s = "%s"%n", s);
System.out.printf("s.length() = %d%n", s.length());
for (int i = 0; i < s.length(); i++) {
System.out.printf("s[%d] = %c%n", i, s.charAt(i));
}
13. DECLARING STRINGS
• We use Java String class for declaring string variables:
String str;
14. CREATING STRINGS
• Before initializing a string variable is equal to null
• Strings can be initialized by:
• Assigning a string literal to the string variable
• Assigning the value of another string variable
• Assigning the result of operation of type string
15. CREATING STRINGS (2)
• Not initialized variables has value of null
String s; // s is equal to null
• Assigning a string literal
String s = "I am string literal!";
• Assigning another string variable
String s2 = s;
• Assigning the result of string operation
String s = "I'm " + 42 + " years old.";
16. READING AND PRINTING STRINGS
• Reading strings from the console
• Use the method input.nextLine()
String s = input.nextLine();
• Printng Strings to the console
• Use methods print() and println()
System.out.print("Please enter your name: ");
String name = input.nextLine();
System.out.printf("Hello, %s!%n", name);
19. COMPARING STRINGS
• There are a number of ways to compare two strings:
• Dictionary-based string comparison
• Case-insensitive
int result = str1.compareToIgnoreCase(str2);
// result == 0 if str1 equals str2
// result < 0 if str1 if before str2
// result > 0 if str1 if after str2
• Case-sensitive
str1.compareTo(str2);
20. COMPARING STRINGS (2)
• Equality checking by equalsIgnoreCase()
• Performs case-insensitive compare
• Returns boolean value
if (str1.equalsIgnoreCase(str2)){
…
}
• The case-sensitive equals() method
if (str1.equals(str2)){
…
}
21. COMPARING STRINGS (3)
• Operators == and != does not check for equality!
• These operators returns boolean value, but check if the addresses of the object are equal
• Use equals() and equalsIgnoreCase() instead
String str1 = new String("Hello");
String str2 = str1;
System.out.println((str1==str2)); // true
String str1 = "Hello";
String str2 = "Hello";
System.out.println((str1==str2)); // true!!!
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println((str1==str2)); // This is false!
22. COMPARING STRINGS – EXAMPLE
• Finding the first in a lexicographical order string from a given list of strings
String[] towns = {“Jamshoro", “hyderabad",
“Qasimabad",
“Latifabad", “Kotri", “Heerabad"};
String firstTown = towns[0];
for (int i=1; i<towns.length; i++) {
String currentTown = towns[i];
if (currentTown.compareTo(firstTown) < 0) {
firstTown = currentTown;
}
}
System.out.println("First town: " + firstTown);
24. CONCATENATING STRINGS
• There are two ways to combine strings:
• Using the concat() method
String str = str1.concat(str2);
• Using the + or the += operator
String str = str1 + str2 + str3;
String str += str1;
• Any object can be appended to string
String name = "Peter";
int age = 22;
String s = name + " " + age; // "Peter 22"
27. SEARCHING STRINGS
• Finding a character or substring within given string
• First occurrence
indexOf(String str)
• First occurrence starting at given position
indexOf(String str, int fromIndex)
• Last occurrence
lastIndexOf(String)
• Last occurrence before given position
lastIndexOf(String, int fromIndex)
28. SEARCHING STRINGS – EXAMPLE
String str = "Java Programming Course";
int index = str.indexOf("Java"); // index = 0
index = str.indexOf("Course"); // index = 17
index = str.indexOf("COURSE"); // index = -1
// indexOf is case sensetive. -1 means not found
index = str.indexOf("ram"); // index = 9
index = str.indexOf("r"); // index = 6
index = str.indexOf("r", 7); // index = 9
index = str.indexOf("r", 10); // index = 20
i = 0 1 2 3 4 5 6 7 8 9 10 11 12 …
s.charAt(i) = J a v a P r o g r a m m …
30. EXTRACTING SUBSTRINGS
• Extracting substrings
• str.substring(int beginIndex, int endIndex)
• lastIndex is not included
String filename = "C:PicsRila2005.jpg";
String name = filename.substring(8, 16);
// name is Rila2005
• str.substring(int beginIndex)
String filename = "C:PicsSummer2005.jpg";
String nameAndExtension = filename.substring(8);
// nameAndExtension is Rila2005.jpg
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
C : P i c s R i l a 2 0 0 5 . j p g
32. SPLITTING STRINGS
• To split a string by given separator(s) use the following method:
String[] split(String regex)
• String regex – String with special format
• We can list the character which we want to use for separator in square brackets […]
String[] parts = "Ivan; Petar,Gosho".split("[;,]");
// this wil separate the stirng into three parts
// "Ivan", " Petar" and "Gosho"
36. REPLACING SUBSTRINGS
• replace(String, String) – replaces all occurrences of given string with another
• The result is new string (strings are immutable)
String cocktail = "Vodka + Martini + Cherry";
String replaced = cocktail.replace("+", "and");
// Vodka and Martini and Cherry
41. CONSTRUCTING STRINGS
• Strings are immutable
• concat(), replace(), trim(), ... return new string, do not modify the old one
• Do not use "+" for strings in a loop!
• It runs very inefficiently!
public static string dupChar(char ch, int count){
String result = "";
for (int i=0; i<count; i++)
result += ch;
return result;
} Bad practice.
Avoid this!
42. CHANGING THE CONTENTS OF A STRING
– STRINGBUILDER
• Use the java.lang.StringBuilder class for modifiable strings of characters:
• Use StringBuilder if you need to keep adding characters to a string
public static String reverseIt(String s) {
StringBuilder sb = new StringBuilder();
for (int i = s.length()-1; i >= 0; i--)
sb.append(s.charAt(i));
return sb.ToString();
}
43. THE STRINGBUILDER CLASS
Capacity
StringBuilder: H e l l o , J a v a !
length() = 11
capacity() = 15 used buffer unused
(length()) buffer
• StringBuilder keeps a buffer memory, allocated in advance
• Most operations use the buffer memory and do not allocate new objects
44. THE STRINGBUILDER CLASS (2)
• StringBuilder(int capacity) constructor allocates in advance buffer memory of
a given size
• By default 16 characters are allocated
• capacity() holds the currently allocated space (in characters)
• charAt(int index) gives access to the char value at given position
• length() hold the length of the string in the buffer
45. THE STRINGBUILDER CLASS (3)
• append(…) appends string or other object after the last character in the buffer
• delete(int start, int end) removes the characters in given range
• insert(int offset, String str) inserts given string (or object) at given
position
• replace(int start, int end, String str) replaces all
occurrences of a substring with given string
• toString() converts the StringBuilder to String object
46. STRINGBUILDER – EXAMPLE
• Extracting all capital letters from a string
public static String extractCapitals(String s) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isUpperCase(ch)) {
result.append(ch);
}
}
return result.toString();
}
47. HOW THE + OPERATOR DOES STRING
CONCATENATIONS?
• Consider following string concatenation:
String result = str1 + str2;
• It is equivalent to this code:
StringBuffer sb = new StringBuffer();
sb.append(str1);
sb.append(str2);
String result = sb.toString();
• Actually several new objects are created and leaved to the garbage collector
• What happens when using + in a loop?
50. METHOD TOSTRING()
• All classes have this public virtual method
• Returns a human-readable, culture-sensitive string representing the object
• Most Java Platform types have own implementation of toString()
51. METHOD STRING.FORMAT()
• Applies templates for formatting strings
• Placeholders are used for dynamic text
• Like System.out.printf(…)
String template = "If I were %s, I would %s.";
String sentence1 = String.format(
template, "developer", "know Java");
System.out.println(sentence1);
// If I were developer, I would know Java.
String sentence2 = String.format(
template, "elephant", "weigh 4500 kg");
System.out.println(sentence2);
// If I were elephant, I would weigh 4500 kg.
52. FORMATTING DATES
• When we print Dates we use prefix t or T
• d, e – day (with/without leading zero)
• m – month
• y, Y – year (2 or 4 digits)
• H, M, S – hour, minute, second
Date now = (new GregorianCalendar()).getTime();
System.out.printf("Now is " +
"%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS", now);
// Now is 23.05.2006 21:09:32
54. EXERCISES
Write a program that reads a string, reverses it and prints it on the console. Example:
"sample" "elpmas".
Write a program to check if in a given expression the brackets are put correctly. Example
of correct expression: ((a+b)/5-d). Example of incorrect expression: )(a+b)).
55. Write a program that finds how many times a substring is contained in a given text (perform
case insensitive search).
Example: The target substring is "in". The text is as follows:
We are living in a yellow submarine. We don't
have anything else. Inside the submarine is
very tight. So we are drinking all the day.
We will move out of it in 5 days.
The result is: 9.
56. You are given a text. Write a program that changes the text in all regions identified by the tags
<upcase> and </upcase> to uppercase. The tags cannot be nested. Example:
We are living in a <upcase>yellow
submarine</upcase>. We don't have
<upcase>anything</upcase> else.
The expected result:
We are living in a YELLOW SUBMARINE. We don't
have ANYTHING else.
57. Write a program that parses an URL address given in the format:
[protocol]://[server]/[resource]
and extracts from it the [protocol], [server] and [resource] elements. For example from the URL
http://www.devbg.org/forum/index.php following information should be extracted: [protocol] =
"http", [server] = "www.devbg.org", [resource] = "/forum/index.php"
58. Write a program that extracts from a given text all the sentences that contain given word.
Example: The word is "in". The text is:
We are living in a yellow submarine. We don't
have anything else. Inside the submarine is
very tight. So we are drinking all the day.
We will move out of it in 5 days.
The expected result is:
We are living in a yellow submarine.
We will move out of it in 5 days.
Consider that the sentences are separated by "." and the words – by non-letter symbols.
59. We are given a string containing a list of forbidden words and a text containing some of these
words. Write a program that replaces the forbidden words with asterisks. Example:
Microsoft announced its next generation Java
compiler today. It uses advanced parser and
special optimizer for the Microsoft JVM.
Words: "Java, JVM, Microsoft"
The expected result:
********* announced its next generation ****
compiler today. It uses advanced parser and
special optimizer for the ********* ***.
60. Write a program that reads a string from the console and lists all the different letters in the string
along with information how many times each letter is found.
Write a program that reads a string from the console and lists all the different words in the string
with information how many times each word is found.
Write a program that reads a string from the console and replaces all series of consecutive identical
letters with a single one. Example: "aaaaabbbbbcdddeeeedssaa" -> "abcdedsa".
61. Write a program that reads a list of words, separated by spaces (' ') , and prints the list in
an alphabetical order.
Write a program that lets the user input a string of maximum 20 characters. If the length
of the string is less, the rest of the characters should be filled with '*'. Print the string into
the console.
Editor's Notes
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ## Introducing the StringBuffer Class StringBuffer represents strings that can be modified and extended at run time. The following example creates three new String objects, and copies all the characters each time a new String is created: String quote = "Fasten your seatbelts, "; quote = quote + "it’s going to be a bumpy night."; It is more efficient to preallocate the amount of space required using the StringBuffer constructor, and its append() method as follows: StringBuffer quote = new StringBuffer(60); // alloc 60 chars quote.append("Fasten your seatbelts, "); quote.append(" it’s going to be a bumpy night. "); StringBuffer also provides a number of overloaded insert() methods for inserting various types of data at a particular location in the string buffer. Instructor Note The example in the slide uses StringBuffer to reverse the characters in a string. A StringBuffer object is created, with the same length as the string. The loop traverses the String parameter in reverse order and appends each of its characters to the StringBuffer object by using append() . The StringBuffer therefore holds a reverse copy of the String parameter. At the end of the method, a new String object is created from the StringBuffer object, and this String is returned from the method .
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
* 03/07/13 07/16/96 (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##