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 {
  /** Main method */
  public static void main(String[] args) {
    // Prompt the user to enter a string
    String s = JOptionPane.showInputDialog("Enter a string:");
 
    // Declare and initialize output string
    String output = "";
 
    if (isPalindrome(s))
      output = s + " is a palindrome";
    else
      output = s + " is not a palindrome";
 
    // Display the result
    JOptionPane.showMessageDialog(null, output);
  }
 
  /** Check if a string is a palindrome */
  public static boolean isPalindrome(String s) {
    // The index of the first character in the string
    int low = 0;
 
    // The index of the last character in the string
    int high = s.length() - 1;
 
    while (low < high) {
      if (s.charAt(low) != s.charAt(high))
        return false; // Not a palindrome
 
      low++;
      high--;
    }
 
    return true; // The string is a palindrome
  }
}

 

 

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 {
  /** Main method */
  public static void main(String[] args) {
    // Prompt the user to enter a string
    String s = JOptionPane.showInputDialog("Enter a string:");
 
    // Invoke the countLetters method to count each letter
    int[] counts = countLetters(s.toLowerCase());
 
    // Declare and initialize output string
    String output = "";
 
    // Display results
    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");
    }
 
    // Display the result
    JOptionPane.showMessageDialog(null, output);
  }
 
  // Count each letter in the string
  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;
  }
}