Chapter 8 Strings and Text I/O
The String Class
·
Constructing a
String:
·
String
message = "Welcome to Java“;
·
String
message = new String("Welcome to Java“);
·
String
s = new String();
·
Obtaining String
length and Retrieving Individual Characters in a string
·
String
Concatenation (concat)
·
Substrings (substring(index), substring(start, end))
·
Comparisons
(equals, compareTo)
·
String
Conversions
·
Finding a
Character or a Substring in a String
·
Conversions
between Strings and Arrays
·
Converting
Characters and Numeric Values to Strings
Constructing Strings
String
newString = new String(stringLiteral);
String
message = new String("Welcome to Java");
Since
strings are used frequently, Java provides a shorthand initializer
for creating a string:
String
message = "Welcome to Java";
Strings
Are Immutable
A
String object is immutable; its contents cannot be changed. Does the following
code change the contents of the string?
String s = "Java";
s = "HTML";
Interned
Strings
Since
strings are immutable and are frequently used, to improve efficiency and save
memory, the JVM uses a unique instance for string literals with the same
character sequence. Such an instance is called interned. You can also
use a String object’s intern method to return an interned string.
For example, the following statements:
Finding String Length
Finding
string length using the length() method:
message = "Welcome";
message.length() (returns 7)
Retrieving Individual Characters in a String
F Do not use message[0]
Index
starts from 0
String Concatenation
String s3 = s1.concat(s2);
String
s3 = s1 + s2;
s1 +
s2 + s3 + s4 + s5 same as
(((s1.concat(s2)).concat(s3)).concat(s4)).concat(s5);
Extracting
Substrings
You
can extract a single character from a string using the charAt
method. You can also extract a substring from a string using the substring
method in the String class.
String s1 = "Welcome to Java";
String s2 = s1.substring(0,
11) + "HTML";
String Comparisons
F
equals
String s1 = new String("Welcome“);
String s2 = "welcome";
if
(s1.equals(s2)){
// s1 and s2 have the same contents
}
if (s1 == s2) {
// s1 and s2 have the same reference
}
String Comparisons, cont.
F
compareTo(Object object)
String s1 = new String("Welcome“);
String s2 = "welcome";
if (s1.compareTo(s2)
> 0) {
// s1 is greater than s2
}
else if
(s1.compareTo(s2) == 0) {
// s1 and s2 have the same contents
}
else
// s1 is less than s2
String
Conversions
The
contents of a string cannot be changed once the string is created. But you can
convert a string to a new string using the following methods:
F toLowerCase
F toUpperCase
F trim
F replace(oldChar, newChar)
Finding
a Character or a Substring in a String
"Welcome
to Java".indexOf('W') returns 0.
"Welcome
to Java".indexOf('x') returns -1.
"Welcome
to Java".indexOf('o', 5) returns 9.
"Welcome
to Java".indexOf("come") returns 3.
"Welcome
to Java".indexOf("Java", 5) returns 11.
"Welcome
to Java".indexOf("java", 5) returns -1.
"Welcome
to Java".lastIndexOf('a') returns 14.
Convert
Character and Numbers to Strings
The
String class provides several static valueOf methods
for converting a character, an array of characters, and numeric values to
strings. These methods have the same name valueOf
with different argument types char, char[], double,
long, int, and float. For example, to convert a
double value to a string, use String.valueOf(5.44). The return value is string consists of characters
‘5’, ‘.’, ‘4’, and ‘4’.
Example:
Finding Palindromes
FObjective:
Checking whether a string is a palindrome: a string that reads the same forward
and backward.
import javax.swing.JOptionPane;
public class CheckPalindrome {
public static void main(String[] args) {
String s = JOptionPane.showInputDialog("Enter a string:");
String output = "";
if (isPalindrome(s))
output = s + " is a palindrome";
else
output = s + " is not a palindrome";
JOptionPane.showMessageDialog(null, output);
}
public static boolean isPalindrome(String s) {
int low = 0;
int high = s.length() - 1;
while (low < high) { if (s.charAt(low) != s.charAt(high))
return false;
low++;
high--;
}
return true;
}
}
The Character Class
Examples
Character
charObject = new Character('b');
charObject.compareTo(new Character('a')) returns 1
charObject.compareTo(new Character('b')) returns 0
charObject.compareTo(new Character('c')) returns -1
charObject.compareTo(new Character('d') returns –2
charObject.equals(new Character('b')) returns true
charObject.equals(new Character('d')) returns false
Example: Counting Each Letter in a String
This
example gives a program that counts the number of occurrence of each letter in
a string. Assume the letters are not case-sensitive.
import javax.swing.JOptionPane;
public class CountEachLetter {
public static void main(String[] args) {
String s = JOptionPane.showInputDialog("Enter a string:");
int[] counts = countLetters(s.toLowerCase());
String output = "";
for (int i = 0; i < counts.length; i++) { if (counts[i] != 0)
output += (char)('a' + i) + " appears " + counts[i] + ((counts[i] == 1) ? " time\n" : " times\n");
}
JOptionPane.showMessageDialog(null, output);
}
public static int[] countLetters(String s) { int[] counts = new int[26];
for (int i = 0; i < s.length(); i++) { if (Character.isLetter(s.charAt(i)))
counts[s.charAt(i) - 'a']++;
}
return counts;
}
}