So, I created two programs(one with JAVA8) to calculate the total count of uppercase and lowercase characters in given String. After checking the execution time JAVA8 is taking longer execution time than expected. Is there any possible way to optimize any of these code more to reduce execution time and complexity???
Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Counts
{
public static void main(String arg[])throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int upperCase=0, lowerCase=0;
String str=br.readLine();
Long startTimeMemo = System.nanoTime();
for (int k = 0; k < str.length(); k++) {
// Check for uppercase letters.
if (Character.isUpperCase(str.charAt(k))) upperCase++;
// Check for lowercase letters.
if (Character.isLowerCase(str.charAt(k))) lowerCase++;
}
System.out.printf("%d uppercase letters and %d lowercase letters.",upperCase,lowerCase);
Long stopTimeMemo = System.nanoTime();
System.out.println("");
System.out.println("Memoization Time:" + (stopTimeMemo - startTimeMemo));
}
}
JAVA8 Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Count2
{
public static void main(String arg[])throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
Long startTimeMemo = System.nanoTime();
System.out.println(countUpperCase(str) + " " + countLowerCase(str));
Long stopTimeMemo = System.nanoTime();
System.out.println("");
System.out.println("Memoization Time:" + (stopTimeMemo - startTimeMemo));
}
private static long countUpperCase(String s) {
return s.codePoints().filter(c-> c>='A' && c<='Z').count();
}
private static long countLowerCase(String s) {
return s.codePoints().filter(c-> c>='a' && c<='z').count();
}
}