27
Jun 20, 2 022 String and StringBuilder Part I: String

28-Jun-15 String and StringBuilder Part I: String

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 28-Jun-15 String and StringBuilder Part I: String

Apr 18, 2023

String and StringBuilder

Part I: String

Page 2: 28-Jun-15 String and StringBuilder Part I: String

2

About Strings

Strings are objects, but there is a special syntax for writing String literals:"Hello"

Strings, unlike most other objects, have a defined operation (as opposed to a method):

" This " + "is String " + "concatenation"" Strings can contain any character, but some of them must be

“escaped” in order to write them in a literal \" stands for the double-quote (") character \n stands for the newline character \\ stands for the backslash (\)character Each of these is written as a two-character sequence, but represents a

single character in the string

Page 3: 28-Jun-15 String and StringBuilder Part I: String

3

Useful String methods I

char charAt(int index) Returns the character at the given index position (0-based)

boolean startsWith(String prefix) Tests if this String starts with the prefix String

boolean endsWith(String suffix) Tests if this String ends with the suffix String

Page 4: 28-Jun-15 String and StringBuilder Part I: String

4

Useful String methods II

boolean equals(Object obj) Tests if this String is the same as the obj (which may be

any type; false if it’s not a String)

boolean equalsIgnoreCase(String other) Tests if this String is equal to the other String, where case

does not matter

int length() Returns the length of this string; note that this is a

method, not an instance variable

Page 5: 28-Jun-15 String and StringBuilder Part I: String

5

Useful String methods III

int indexOf(char ch) Returns the position of the first occurrence of ch in this

String, or -1 if it does not occur

int indexOf(char ch, int fromIndex) Returns the position of the first occurrence of ch, starting

at (not after) the position fromIndex

There are two similar methods that take a String instead of a char as their first argument

Page 6: 28-Jun-15 String and StringBuilder Part I: String

6

Useful String methods IV

int lastIndexOf(char ch) Returns the position of the last occurrence of ch in this

String, or -1 if it does not occur

int lastIndexOf(char ch, int fromIndex) Returns the position of the last occurrence of ch, searching

backward starting at position fromIndex

There are two similar methods that take a String instead of a char as their first argument

Page 7: 28-Jun-15 String and StringBuilder Part I: String

7

Useful String methods V

String substring(int beginIndex) Returns a new string that is a substring of this string,

beginning with the character at the specified index and extending to the end of this string.

String substring(int beginIndex, int endIndex) Returns a new string that is a substring of this string,

beginning at the specified beginIndex and extending to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex

Page 8: 28-Jun-15 String and StringBuilder Part I: String

8

Understanding “index”

With charAt(index), indexOf(x), and lastIndexOf(x), just count characters (starting from zero)

With substring(from) and substring(from, to), it works better to count positions between characters

So, for example, substring(4, 8) is "said", andsubstring(8, 12) is ", \"H"

"She said, \"Hi\"" 0 1 2 3 4 5 6 7 8 9 10 11 12 13

"She said, \"Hi\""0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

If indexOf(',') is 8, then substring(0, indexOf(',')) is "She said"and substring(indexOf(',') + 1) is " \"Hi\""

Page 9: 28-Jun-15 String and StringBuilder Part I: String

9

Useful String methods VI

String toUpperCase() Returns a new String similar to this String, in which all

letters are uppercase

String toLowerCase() Returns a new String similar to this String, in which all

letters are lowercase

String trim() Returns a new String similar to this String, but with

whitespace removed from both ends

Page 10: 28-Jun-15 String and StringBuilder Part I: String

10

Useful String methods VII

String[] split(String regex) Breaks the string up into an array of strings The parameter is a regular expression that defines what

separates the strings For example,

String s = "one, two, three"; String[] ss = s.split(", ");

This assigns the array {"one", "two", "three"} to ss Regular expressions are complex expressions that assign

meanings to many common punctuation marks, such as +, *, period, and [

Hence, regular expressions are powerful, but can be treacherous if you aren’t very familiar with them

Page 11: 28-Jun-15 String and StringBuilder Part I: String

11

Finally, a useless String method

String toString() Returns this String

Why do we have this method? Consistency--Every Object has a toString() method

Page 12: 28-Jun-15 String and StringBuilder Part I: String

12

Strings are immutable

A String, once created, cannot be changed None of the preceding methods modify the String,

although several create a new String Statements like this create new Strings:

myString = myString + anotherCharacter; Creating a few extra Strings in a program is no big deal Creating a lot of Strings can be very costly

Page 13: 28-Jun-15 String and StringBuilder Part I: String

13

More about equals If you write

String s = "abc"; String t = "abc";the compiler only creates the string "abc" once, and makes s and t both refer to this one string

It can do this because strings are immutable Hence, the test s == t will be true

However, if you now write String u = "a" + "bc";the test s == u will be false

This is because they are different strings

Moral: Use equals for strings, not ==

Page 14: 28-Jun-15 String and StringBuilder Part I: String

14

Still more about equals

Suppose you want to test whether a variable name has the value "Dave" Here’s the obvious way to do it:

if (name.equals("Dave")) { ... } But you could also do it this way:

if ("Dave".equals(name)) { ... } It turns out that the second way is usually better Why?

If name == null, the first way will cause a NullPointerException, but the second way will just return false

Page 15: 28-Jun-15 String and StringBuilder Part I: String

Apr 18, 2023

Strings, Etc.

Part II: StringBuilder

Page 16: 28-Jun-15 String and StringBuilder Part I: String

16

About StringBuilders A StringBuilder has a capacity (the number of characters it can

hold) and a length (the number of characters it is currently holding)

If the capacity is exceeded, the StringBuilder is copied to a new location with more room

StringBuilder is a reimplementation of StringBuffer The API (collection of methods) is the same StringBuffers are threadsafe, but StringBuilders are more efficient

StringBuilders are used to implement String concatenation Whenever you say String s = "ab" + "cd", Java creates a

StringBuffer containing the characters a and b, appends the characters c and d to it, and converts the result back to a String

As you might guess, this isn’t terribly efficient, but it’s fine if you don’t overdo it

Page 17: 28-Jun-15 String and StringBuilder Part I: String

17

StringBuilder constructors

StringBuilder() Constructs a StringBuilder with a capacity of 16

characters

StringBuilder(int capacity) Constructs a StringBuilder with the requested capacity

StringBuilder(String str) Constructs a StringBuilder containing the String str

Page 18: 28-Jun-15 String and StringBuilder Part I: String

18

Useful StringBuilder methods I

StringBuilder append(X) Appends X to the end of this StringBuilder; also (as a

convenience) returns this StringBuilder

The append method is so heavily overloaded that it will work with any argument; if the argument is an object, its toString() method is used

Page 19: 28-Jun-15 String and StringBuilder Part I: String

19

Useful StringBuilder methods II

int length() Returns the number of characters in this StringBuilder

void setLength(int newLength) Sets the number of characters in this StringBuilder; this

may result in truncation of characters at the end, or addition of null characters

Page 20: 28-Jun-15 String and StringBuilder Part I: String

20

Useful StringBuilder methods III

char charAt(int index) Returns the character at the location index

void setCharAt(int index, char ch) Sets the character at location index to ch

StringBuilder reverse() The sequence of characters in this StringBuilder is

replaced by the reverse of this sequence, and also returned as the value of the method

Page 21: 28-Jun-15 String and StringBuilder Part I: String

21

Useful StringBuilder methods IV

StringBuilder insert(int offset, X) Insert X starting at the location offset in this

StringBuilder, and also return this StringBuilder as the value of the method. Like append, this method is heavily overloaded

StringBuilder deleteCharAt(int index) Deletes the character at location index

StringBuilder delete(int start, int end) Deletes chars at locations start through end-1

Page 22: 28-Jun-15 String and StringBuilder Part I: String

22

Useful StringBuilder methods V

String substring(int start) Returns a new String of characters from this

StringBuilder, beginning with the character at the specified index and extending to the end of this string.

String substring(int start, int end) Returns a new String of characters from this

StringBuilder, beginning at location start and extending to the character at index end-1. Thus the length of the substring is end-begin

String toString() Returns the characters of this StringBuilder as a String

Page 23: 28-Jun-15 String and StringBuilder Part I: String

23

When to use StringBuilders

If you make a lot (thousands) of changes or additions to a String, it is much more efficient to use a StringBuilder

If you are simply examining the contents of a String, then a String is at least as efficient as a StringBuilder

For incidental use (such as creating output lines), use Strings; they are more convenient

Page 24: 28-Jun-15 String and StringBuilder Part I: String

Apr 18, 2023

Strings, etc.

Part III: Characters

Page 25: 28-Jun-15 String and StringBuilder Part I: String

25

The Character class

char is a primitive type, not an object, therefore… …there are no methods you can call on a char This is why we need a Character class!

There are a lot of methods in the Character class They are all static Do you see why?

Page 26: 28-Jun-15 String and StringBuilder Part I: String

26

Some Character methods

static boolean isDigit(char ch) static boolean isLetter(char ch) static boolean isLetterOrDigit(char ch) static boolean isLowerCase(char ch) static boolean isUpperCase(char ch) static boolean isWhitespace(char ch) static char toLowerCase(char ch) static char toUpperCase(char ch) For more methods, see java.lang.Character

Page 27: 28-Jun-15 String and StringBuilder Part I: String

27

The End