1. What is String in Java?
String is a Class in java and defined in java.lang package. It’s not a primitive data type like int and long. String class represents character Strings. String is used in almost all the Java applications and there are some interesting facts we should know about String. String in immutable and final in Java and JVM uses String Pool to store all the String objects.
Some other interesting things about String is the way we can instantiate a String object using double quotes and overloading of “+” operator for concatenation.
2. Difference between String, StringBuilder, and StringBuffer?
The string is immutable and final in Java, so whenever we do String manipulation, it creates a new String. String manipulations are resource consuming, so java provides two utility classes for String manipulations – StringBuffer and StringBuilder.
StringBuffer and StringBuilder are mutable classes. StringBuffer operations are thread-safe and synchronized where StringBuilder operations are not thread-safe. So in a multi-threaded environment, we should use StringBuffer but in the single-threaded environment, we should use StringBuilder.
StringBuilder performance is fast than StringBuffer because of no overhead of synchronization.
3. Why is String immutable or final?
There are several benefits of String because it’s immutable and final.
4. What is a String pool?
As the name suggests, String Pool is a pool of Strings stored in Java heap memory. We know that String is a special class in Java and we can create String objects using the new operator as well as providing values in double-quotes.
Check this post for more details about String Pool.
5. How to reverse a String?
public static void main(String[] args) { System.out.println("Enter string to reverse:"); Scanner read = new Scanner(System.in); String str = read.nextLine(); StringBuilder sb = new StringBuilder(); for(int i = str.length() - 1; i >= 0; i--) { sb.append(str.charAt(i)); } System.out.println("Reversed string is:"); System.out.println(sb.toString()); }
Use StringBuilder reverse() method.
public static void main(String[] args) { System.out.println("Enter string to reverse:"); Scanner read = new Scanner(System.in); String str = read.nextLine(); StringBuilder sb = new StringBuilder(str); System.out.println("Reversed string is:"); System.out.println(sb.reverse().toString()); }
6. Why String is a popular HashMap key?
Since String is immutable, its hashcode is cached at the time of creation and it doesn’t need to be calculated again. This makes it a great candidate for the key in a Map and it’s processing is fast than other HashMap key objects. This is why String is mostly used Object as HashMap keys.
7. What are the different ways to create a string?
String str = new String("folau");// by using the new keyword String str1 = "folau";// by using the double quotes
8. Check for palindrome (string is equal to its reversed version)
private static boolean isPalindromeString(String str) { if (str == null) return false; int length = str.length(); System.out.println(length / 2); for (int i = 0; i < length / 2; i++) { if (str.charAt(i) != str.charAt(length - i - 1)) return false; } return true; }
Use StringBuilder reverse() method.
private static boolean isPalindrome(String str) { if (str == null) return false; StringBuilder strBuilder = new StringBuilder(str); strBuilder.reverse(); return strBuilder.toString().equals(str); }
9. Remove a single character from a string
Use the Character class to create a string and pass it to the replaceAll method.
private static String removeChar(String str, char c) { if (str == null) return null; return str.replaceAll(Character.toString(c), ""); }
10. Convert String to char and vice versa?
We can’t convert a string to a char because a char is a single character. On the other hand, we can use charAt or toCharArray to convert chars to a string.
11. Find all permutations of a string
public static Set<String> permutationFinder(String str) { Set<String> perm = new HashSet<String>(); //Handling error scenarios if (str == null) { return null; } else if (str.length() == 0) { perm.add(""); return perm; } char initial = str.charAt(0); // first character String rem = str.substring(1); // Full string without first character Set<String> words = permutationFinder(rem); for (String strNew : words) { for (int i = 0;i<=strNew.length();i++){ perm.add(charInsert(strNew, initial, i)); } } return perm; } public static String charInsert(String str, char c, int j) { String begin = str.substring(0, j); String end = str.substring(j); return begin + c + end; } public static void main(String[] args) { String s = "AAC"; String s1 = "ABC"; String s2 = "ABCD"; System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s)); System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1)); System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2)); }
11. Find the longest palindrome in a string.
public static void main(String[] args) { System.out.println(longestPalindromeString("1234")); System.out.println(longestPalindromeString("12321")); System.out.println(longestPalindromeString("9912321456")); System.out.println(longestPalindromeString("9912333321456")); System.out.println(longestPalindromeString("12145445499")); System.out.println(longestPalindromeString("1223213")); System.out.println(longestPalindromeString("abb")); } static public String intermediatePalindrome(String s, int left, int right) { if (left > right) return null; while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) { left--; right++; } return s.substring(left + 1, right); } // O(n^2) public static String longestPalindromeString(String s) { if (s == null) return null; String longest = s.substring(0, 1); for (int i = 0; i < s.length() - 1; i++) { //odd cases like 121 String palindrome = intermediatePalindrome(s, i, i); if (palindrome.length() > longest.length()) { longest = palindrome; } //even cases like 1221 palindrome = intermediatePalindrome(s, i, i + 1); if (palindrome.length() > longest.length()) { longest = palindrome; } } return longest; }
12. Why char array is preferred over string for database password?
String is immutable in Java and stored in String pool. Once it’s created it stays in the pool until unless garbage collected, so even though we are done with password it’s available in memory for longer duration and there is no way to avoid it. It’s a security risk because anyone having access to memory dump can find the password as clear text.
If we use a char array to store password, we can set it to blank once we are done with it. So we can control for how long it’s available in memory that avoids the security threat with String.
13. Check if two strings are the same?
String s1 = "abc"; String s2 = "abc"; String s3= new String("abc"); System.out.println("s1 == s2 ? "+(s1==s2)); //true System.out.println("s1 == s3 ? "+(s1==s3)); //false System.out.println("s1 equals s3 ? "+(s1.equals(s3))); //true
There are two ways to check if two Strings are equal or not – using “==” operator or using equals
method. When we use “==” operator, it checks for the value of String as well as the reference but in our programming, most of the time we are checking equality of String for value only. So we should use the equals method to check if two Strings are equal or not.
There is another function equalsIgnoreCase
that we can use to ignore case.
13. is String thread-safe?
Strings are immutable, so we can’t change its value in runtime. Hence it’s thread-safe and can be safely used in a multi-threaded environment.