String methods let you inspect or transform text. trim() returns text without leading and trailing ordinary whitespace; isEmpty() tests whether its length is zero. toLowerCase() and toUpperCase() return case-converted text. A String’s contents do not change in place: store the returned value if you want to use it later. We use simple English text in these examples.
A String variable refers to a text object. Two variables can refer to the same object, or to separate objects with equal text. Think of two labels attached to one notebook versus two notebooks containing the same words.
Use equals to compare String contents. == asks whether both variables refer to
the very same object, which is a different question. Java may
reuse literal strings, so == can appear to work in one example and then fail
with text constructed at runtime. The mistake is the comparison rule, not a
random behavior of the input reader.
Choose rules before cleanup
Removing outer spaces can be helpful, but do not silently remove internal spaces or change case unless the task calls for it. A person’s topic title can preserve its spelling while an answer comparison deliberately ignores surrounding spaces. Keep the original and cleaned values separate when you need to explain the transformation. Check empty text as well as a normal word.
public class Main {
public static void main(String[] args) {
String raw = " Java Basics ";
String clean = raw.trim();
System.out.println(raw.length());
System.out.println(clean.length());
System.out.println(clean);
System.out.println(" ".trim().isEmpty());
}
}Check your prediction
13
11
Java Basics
true trim returns a result and leaves raw unchanged. Internal space between Java and Basics remains. Blank input consisting of spaces becomes empty after this particular cleanup rule.
In the next example, new String("Java") deliberately makes a separate text
object. Ordinary text declarations do not need this extra step; we use it here
only to make the difference between identity and contents visible.
public class Main {
public static void main(String[] args) {
String literal = "Java";
String separate = new String("Java");
System.out.println(literal == separate);
System.out.println(literal.equals(separate));
}
}Check your prediction
false
true new String deliberately creates a different object for this comparison. The contents are still Java. Do not memorize which strings happen to share identity; use equals when the question is about contents.
charAt(index) returns one char at a zero-based position. A char is a single
character value in these English examples; a literal such as 'L' uses single
quotes. A String uses double quotes and can hold several characters.
public class Main {
public static void main(String[] args) {
String topic = "Loops";
System.out.println(topic.charAt(0));
System.out.println(topic.charAt(topic.length() - 1));
System.out.println(topic.toLowerCase());
}
}Check your prediction
L
s
loops charAt returns a char at a zero-based position. A char literal uses single quotes, such as ‘L’; a String uses double quotes. Empty text has no valid character position, just as an empty array has no element.
A reference can also be null, meaning it refers to no object. This is different
from "", which is an actual String with no characters. Calling a method through
null fails. Non-null means an actual object is supplied. The following exercise
assumes an actual array containing actual Strings, including the wanted value.
Your turn
Find a topic by content
Write containsTopic(String[] topics, String wanted) for non-null arrays containing non-null Strings and a non-null wanted value. Return true if any element equals wanted. Use exact case-sensitive comparison. Test Loops present, Missing absent and an empty array. The normal main prints true.
public class Main {
public static void main(String[] args) {
System.out.println(containsTopic(new String[] {"Java", "Loops"}, "Loops"));
}
static boolean containsTopic(String[] topics, String wanted) {
return false; // Replace the placeholder.
}
}Hint 1: the idea
A match can finish the search immediately; no match is known only after every element has been checked.
Hint 2: a first step
Use equals on each current topic. Put the final false return after the loop, not in the first nonmatching iteration.
Show one solution
public class Main {
public static void main(String[] args) {
System.out.println(containsTopic(new String[] {"Java", "Loops"}, "Loops"));
}
static boolean containsTopic(String[] topics, String wanted) {
for (String topic : topics) {
if (topic.equals(wanted)) {
return true;
}
}
return false;
}
}true Change it and explain
Show that the first element can fail to match while the second succeeds. This case catches an early false return inside the loop. Explain why a search that returns true for every nonempty list would still pass one poorly chosen test.
Day 6 will teach you to reject missing text before calling String methods. For now, the exercise supplies actual Strings so you can focus on content comparison.
Completion is saved in this browser only. It does not measure mastery.