Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ganesh_JavaSE7_Programming_1z0-804_study_guide.pdf
Скачиваний:
94
Добавлен:
02.02.2015
Размер:
5.88 Mб
Скачать

Chapter 7

String Processing

Search, parse, and build strings

Search, parse, and replace strings by using regular exprsssions,

Exam Topics using expression patterns for matching limited to . (dot), * (star), + (plus), ?, \d, \D, \s, \S, \w, \W, \b. \B, [], ().

Format strings using the formatting parameters of %b, %c, %d, %f, and %s in format strings.

String objects are extensively used in writing Java applications. Java programs use strings not only in business logic but also to implement utility functionality such as logging. Therefore, it is useful and important to understand strings and related concepts.

Apart from the common operations, searching and parsing are two useful operations that are performed on strings. Java provides extensive support to achieve these operations efficiently and easily. Starting from Version 4, Java supports regular expressions and offers two useful classes to exploit the power of regular expressions. From Version 5 on, Java also supports C-like printf() style for formatting strings.

The OCAJP7 exam has three topics related to strings: “Create and manipulate strings;” “Manipulate data using the StringBuilder class and its methods;” and “Test equality between strings and other objects using == and equals()”. On the assumption that you have the prerequisites for OCPJP 7 certification and are already comfortable with using strings, we proceed directly to the topics covered in the OCPJP7 exam.

As an OCPJP7 exam candidate, you are expected to be familiar with searching, parsing, and building strings; regular expressions and their usage; and string formatting and format specifiers. In this chapter, we will cover all these topics in detail.

Processing Strings

In this section, you will learn how to process character data stored within a String object.

String Searching

When working with strings, you often need to search within a given string. There are several overloaded versions of the method indexOf() available in the String class for searching a string forward, the lastIndexOf() method for

205

Chapter 7 String Processing

searching a string backward, and the regionMatches() method for comparing a “region” of text within a string. We’ll discuss each of these methods in turn.

The IndexOf() Method

How do you search for a particular character within a string and, if it occurs, at what position? For example, which index position does the character J occupy in the string “OCPJP”? Listing 7-1 contains the code that uses the indexOf() method to answer this question.

Listing 7-1.  SearchString1.java

// Demonstrates searching a character in a string public class SearchString1 {

public static void main(String[] s) { String str = "OCPJP";

System.out.println("Character J occurs at index: " + str.indexOf('J'));

}

}

It prints the following:

Character J occurs at index 3

Quite easy, right? The indexOf() method searches the specified character— here it is, the character J— and returns the first occurrence of the character (note that the index starts from 0, not 1!). Now, let’s search a substring within in a given string. The indexOf() method is overloaded, and one definition of the method takes a string as a search argument. Listing 7-2 shows an example.

Listing 7-2.  SearchString2.java

// Demonstrates searching a substring within a string using indexOf() method public class SearchString2 {

public static void main(String[] s){

String str = "I am preparing for OCPJP";

System.out.println("Substring \"for\" occurs at index: " + str.indexOf("for"));

}

}

This program prints the following:

Substring "for" occurs at index: 15

(Please note that we used the escape character, \, to print “for” within double quotes.)

What will happen if the search string does not exist in the string? For instance, if you search “fort” instead of “for” in above example, you’ll get this result:

Substring "for" occurs at index: -1

Well, a failed indexOf search results in the value −1, indicating “not found.”

These two were simple problems; now let’s try a slightly harder one. Given a big string, how can you find how many times a given string (say “am”) occurs within that string? Not to worry—in this case there is another version of the indexOf() method. In this method you can specify an index from which the search should commence. Listing 7-3 shows the implementation.

206

Chapter 7 String Processing

Listing 7-3.  SearchString3.java

// This example demonstrates how to search multiple occurences of a search string public class SearchString3 {

public static void main(String[] s) {

String str = "I am a student. I am preparing for OCPJP"; int fromIndex = 0;

while(str.indexOf("am", fromIndex) > −1) { fromIndex = str.indexOf("am", fromIndex);

System.out.println("Substring \"am\" occurs at index: " + fromIndex); fromIndex++;

}

}

}

The example prints the following:

Substring "am" occurs at index: 2 Substring "am" occurs at index: 18

It uses a while loop to check whether more occurrences of the search string exist in the input string. It also maintains an index (fromIndex) from which you search ahead. It increments the fromIndex variable after each occurrence of the search string so that the next occurrence of the search string can be found.

If you want to search the last occurrence of the search string, you can use the overloaded versions of the lastIndexOf() method defined in the String class. The String class also has simple methods to check for beginnings or ending of strings, and these methods are given in Table 7-1.

Table 7-1.  Methods to Check for Matching Prefix or Suffix in a String

Method

Description

boolean startsWith(String prefixString,

Starting from offset, check if this string has prefixString.

int offset)

 

boolean startsWith(String prefixString)

Check if this string has prefixString; equivalent to

 

startsWith(prefixString, 0);

boolean endsWith(String suffixString)

Check if this string has the suffixString.

 

 

The regionMatches() Method

Consider the string “Tarzan: Hi Jane, wanna ride an elephant? \n Jane: No thanks! I’m preparing for OCPJP now!” How can you check if the string “ Jane: No thanks!” is present as the first part in Jane’s response? (Note: Jane’s response is the region of text that comes after the newline character “\n”.)

There are many ways to solve this problem, and you’ll use the regionMatches() method here in order to learn how to use it. Table 7-2 lists the two overloaded methods of the regionMatches() method. To solve the problem in the given string, you can first look for the character “\n” and then from that index position, you can search for the string “ Jane: No thanks! ”, as shown in Listing 7-4.

207

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]