String is an immutable object. Every character of a string is Unicode 16-bit. The
String class is marked final. To create a string I can do the following:
java STRING CREATION
String s = "hello";
String a = new String();
String c = new String("hello");
Please notice that
c == s returns false because even if the “hello” string is the same one (there is just that one in the string pool), the object created is different. Remember that the String is indeed immutable, but not the variable that you can reassign the way you want.
If I have
s.concat("pippo"), the variable
s does not change its content, the method returns a new string “hellopippo”.
Some useful method to know:
public char charAt(int index): the index is 0-based, it returns the char at the index;
public String concat(String s): it’s an append, really similar to the usage of
public boolean equalsIgnoreCase(String s): verify equality of the content of two strings without case-sensitive check;
public String substring(int index, int end): index is 0-based, end is 1-based since it’s the offset (you can also think of it like end-1 if you want to think of 0-base index);
public String trim(): returns the String without blank spaces at the end and at the beginning of the String;
StringBuilder and StringBuffer
StringBuilder is like
StringBuffer but it’s not thread-safe because the methods are not
StringBuilder is available from Java 5. StringBuffer does not have the ovveride of equals, so it compares references. It has 3 constructors:
public StringBuilder append( (String|char|int|...) s): appends the new value and return itself;
public StringBuilder delete(int start, int end): deletes a chuck of the string and return itself (start is 0-base, end is 1-based);
public StringBuilder insert(int offset, (String|char|int|...) s): offset is 0-based, it inserts the content at that position and shift the rest;
File navigation and I/0
A file is an object that represents in an abstract way a
File or a
Directory in the filesystem. It accepts as argument a path. If the file does not exists, the file will not be created.
To create it we use
createNewFile() that returns false if the file exists already. If i try to create a file but the path hierarchy does not exists, we get an exception. There are other methods like
mkdir() and every one of them returns a boolean. One of the constructor of
File can accept the path and another
File so that you can build a file hierarchy.
FileWriter accepts a
File and allows to write a string in a file. Other methods are
FileReader accepts a
File and reads a certain number of chars with
You can also find more abstract classes like
BufferedWriter has the method
FileWriter does not have.
BufferedReader is able to use the method
readLine() to read line by line until it returns null when there no more lines.
Scanner and Tokenizing
With a Scanner you can find tokens. Here’s some reason why is the best tool for the job:
- Scanners can be built from string files, streams and strings;
- tokenizing can be done with a loop and you can go out of the loop whenever you like;
- token can be automatically converted to primitives;
We have several methods to use with the string Scanner. You have
hasNext() to go through the loop but you also have
Xxx is a primtive. With
useDelimiter you can set a custom regular expression as delimiter. Also with the method
findInLine that accepts also a regular expression, you can get the next occurrence of a pattern constructed from the specified string, ignoring delimiters.