String
A string is actually an array of
unicode characters
.
String Comparison
String has its own compare function
Can we use "==" to compare two strings?
Depends on
Does the language support
operator overloading
?
Yes (like C++), we may use "==" to compare strings
No (like Java), we may not use "==" to compare two strings. "==" actually compares whether these two objects are the same object.
For Java, use
s1.equals(s2)
or
s1.compareTo(s2) == 0
Immutable or Mutable
In some languages (like C++), string is mutable
, while in Java, string is immutable
Time Complexity of Built-in Operations
For instance, if the length of the string isN
, the time complexity of both finding operation and substring operation isO(N)
.
// "static void main" must be defined in a public class.
public class Main {
public static void main(String[] args) {
String s1 = "Hello World";
// 1. concatenate
s1 += "!";
System.out.println(s1);
// 2. find
System.out.println("The position of first 'o' is: " + s1.indexOf('o'));
System.out.println("The position of last 'o' is: " + s1.lastIndexOf('o'));
// 3. get substring
System.out.println(s1.substring(6, 11));
}
}
Beware of String Concatenation in Java
In Java, since the string is
immutable
, concatenation works by first allocating enough space for the new string, copy the contents from the old string and append to the new string.
In Java, using "+" for string concatenation, the time complexity will be O(n)
For the following, total time complexity in total will be O(n^2)
// "static void main" must be defined in a public class.
public class Main {
public static void main(String[] args) {
String s = "";
int n = 10000;
for (int i = 0; i < n; i++) {
s += "hello";
}
}
}
Mutate String in Java
1. convert it to a char array
// "static void main" must be defined in a public class.
public class Main {
public static void main(String[] args) {
String s = "Hello World";
char[] str = s.toCharArray();
str[5] = ',';
System.out.println(str);
}
}
2. use some other data structures like StringBuilder
StringBuilder
The below code runs in O(n) time complexity.
// "static void main" must be defined in a public class.
public class Main {
public static void main(String[] args) {
int n = 10000;
StringBuilder str = new StringBuilder();
for (int i = 0; i < n; i++) {
str.append("hello");
}
String s = str.toString();
}
}
Last updated
Was this helpful?