Prepare for OCAJP, (3)
String and some common APIs.
String
- Immutability
- String is immutable, which means unchangeable.
- Immutable only has a getter. There’s no way to change the value of s once it’s set.
- immutable classes in Java are final, and subclasses can’t add mutable behavior.
- String Pool
- myObject.toString() is a string but not a literal, so it does not go into the string pool.
- Strings not in the string pool are garbage collected just like any other object.
String name = "Fluffy"; //String pool String name = new String("Fluffy"); //NO, JVM
- Important String Methods
length()
returns the number of characters in the String.charAt()
lets you query the string to find out what character is at a s index.indexOf()
second argument is optional, it’s fromIndex.substring()
optional second parameter, which is the end indextoLowerCase(
) andtoUpperCase()
equals()
andequalsIgnoreCase()
startsWith()
andendsWith()
contains()
looks for matches in the String.trim()
removes whitespace,\r
(carriage return),\t
(tab) and\n
(newline)
String string = "animals"; System.out.println(string.length()); // 7 System.out.println(string.charAt(0)); // a System.out.println(string.indexOf('a', 4)); //4 System.out.println(string.indexOf("al", 5)); //-1 System.out.println(string.substring(3)); // mals System.out.println(string.substring(3, 4)); // m System.out.println(string.substring(3, 3)); // empty string System.out.println(string.substring(3, 2)); // throws exception System.out.println("abc".endsWith("c")); // true System.out.println("abc".contains("b")); // true System.out.println("\t a b c\n".trim()); // a b c
- Equality
equals
compares values==
compares references
StringBuilder
charAt()
,indexOf()
,length()
, andsubstring()
append()
is by far the most frequently used methodinsert()
adds characters to the requested indexdelete()
anddeleteCharAt()
- reverse()
toString
Equality
equals
compares values==
compares references
Array
The array does not allocate space for the String objects.
Instead, it allocates space for a reference to where the objects are really stored.
- Sorting
String[] strings = { "10", "9", "100" }; Arrays.sort(strings);
-
Searching
have to be a sorted array
ArrayList
- import package
import java.util.* ;// import whole package including ArrayList import java.util.ArrayList; // import just ArrayList
add()
insert a new value in the ArrayList.boolean add(E element) void add(int index, E element)
remove
remove the fi rst matching value in the ArrayList or remove the element at a specified index.boolean remove(Object object) E remove(int index)
set()
method changes one of the elements of the ArrayList without changing the size. Throws IndexOutOfBoundsExceptionE set(int index, E newElement)
isEmpty()
andsize()
clear()
discard all elements of the ArrayList, make it emptycontains()
boolean contains(Object object)
- Wrapper Classes
int primitive = Integer.parseInt("123"); Integer wrapper = Integer.valueOf("123");
- Converting Between array and List
Object[] objectArray = list.toArray(); List<String> list = Arrays.asList(array); // returns fixed size list
Dates and Times
-
Import time classes
import java.time.*;
- Creating Dates and Times
LocalDate
, like your birthday this yearLocalTime
, like, “midnight”LocalDateTime
, like “the stroke of midnight on New Year’s”ZonedDateTime
, Oracle recommends avoiding time zones unless you really need them.
LocalDate date1 = LocalDate.of(2015, Month.JANUARY, 20); LocalTime time1 = LocalTime.of(6, 15);// hour and minute LocalDateTime dateTime1 = LocalDateTime.of(2015, Month.JANUARY, 20, 6, 15, 30); LocalDateTime dateTime2 = LocalDateTime.of(date1, time1); LocalDate.of(2015, Month.JANUARY, 32) // throws DateTimeException
-
Manipulating Dates and Times
The date and time classes are immutable, just like String was. This means that we need to remember to assign the results of these methods to a reference variable so they are not lost.
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20); LocalTime time = LocalTime.of(5, 15); LocalDateTime dateTime = LocalDateTime.of(date, time); dateTime = dateTime.minusDays(1); dateTime = dateTime.minusHours(10); dateTime = dateTime.minusSeconds(30); //chaining method LocalDateTime dateTime = LocalDateTime.of(date2, time) .minusDays(1).minusHours(10).minusSeconds(30);
tricky parts
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20); date.plusDays(10); //January 20, 2020. Adding 10 days was useless because we ignored the result. date = date.plusMinutes(1); // DOES NOT COMPILE. LocalDate does not contain time
- Working with Periods
- LocalDate has
toEpochDay()
, which is the number of days since January 1, 1970. - LocalDateTime has
toEpochTime()
, which is the number of seconds since January 1, 1970. - LocalTime does not have an epoch method.
- Special January 1, 1970 refers to when it was January 1, 1970 in GMT (Greenwich Mean Time).
- You shouldnot chain methods when creating a Period
Period annually = Period.ofYears(1); Period quarterly = Period.ofMonths(3); Period everyThreeWeeks = Period.ofWeeks(3); Period everyOtherDay = Period.ofDays(2); Period everyYearAndAWeek = Period.of(1, 0, 7); Period wrong = Period.ofYears(1).ofWeeks(1); // every week
- LocalDate has
- Formatting Dates and Times
- DateTimeFormatter is in the package java.time.format.
- two predefi ned formats that can show up on the exam: SHORT and MEDIUM.
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20); LocalTime time = LocalTime.of(11, 12, 34); LocalDateTime dateTime = LocalDateTime.of(date, time); System.out.println(date .format(DateTimeFormatter.ISO_LOCAL_DATE));// 2020-01-20 System.out.println(time.format(DateTimeFormatter.ISO_LOCAL_TIME));//11:12:34 System.out.println(dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));//2020-01-20T11:12:34 DateTimeFormatter shortDateTime = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); System.out.println(shortDateTime.format(dateTime)); // 1/20/20 System.out.println(shortDateTime.format(date)); // 1/20/20 System.out.println(shortDateTime.format(time)); // UnsupportedTemporalTypeException, a time cannot be formatted as a date DateTimeFormatter mediumF = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); System.out.println(mediumF.format(dateTime)); // Jan 20, 2020 11:12:34 AM DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM dd, yyyy, hh:mm"); System.out.println(dateTime.format(f)); // January 20, 2020, 11:12
-
Parsing Dates and Times
convert a String to a date or time.
DateTimeFormatter f = DateTimeFormatter.ofPattern("MM dd yyyy"); LocalDate date = LocalDate.parse("01 02 2015", f); // 2015-01-02 LocalTime time = LocalTime.parse("11:22"); // 11:22