Search code examples
javarecursiontrim

How would you trim a string recursively without Java's trim() method?


The following method returns a trimmed string using iteration. How would you approach this recursively? Link to source

    public static String allTrim(String str) {
        int j = 0;
        int count = 0;  // Number of extra spaces
        int lspaces = 0;// Number of left spaces
        char ch[] = str.toCharArray();
        int len = str.length();
        StringBuffer bchar = new StringBuffer();
        if (ch[0] == ' ') {
            while (ch[j] == ' ') {
                lspaces++;
                j++;
            }
        }

        for (int i = lspaces; i < len; i++) {
            if (ch[i] != ' ') {
                if (count > 1 || count == 1) {
                    bchar.append(' ');
                    count = 0;
                }
                bchar.append(ch[i]);
            } else if (ch[i] == ' ') {
                count++;
            }
        }
        return bchar.toString();
    }

Solution

  • You can do it using recursion with taking two extra variables, one for startIndex and one for endIndex. Either you can take these variables in your trimAll method or can declare globally.

    public class TrimSpace {
    
    static String trimAll(String str, int startIndex, int endIndex){
        if(str.charAt(startIndex)!=' ' && str.charAt(endIndex)!=' '){
            return str.substring(startIndex, endIndex+1);
        }
        else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)==' '){
            return trimAll(str, startIndex+1, endIndex-1);
        }
        else if(str.charAt(startIndex)==' ' && str.charAt(endIndex)!=' '){
            return trimAll(str, startIndex+1, endIndex);
        }
        else{
            return trimAll(str, startIndex, endIndex-1);
        }
    }
    
    public static void main(String[] args) {
    
        String str = "   hello   ";
        String result = trimAll(str, 0, str.length()-1);
        System.out.println(result);
        //to count extra spaces you just need to get the length difference 
        int extraSpaces = str.length() - result.length();
        System.out.println(extraSpaces);
    }
    

    }