How to trim a java stringbuilder?

前端 未结 8 2086
南方客
南方客 2021-01-11 11:18

I have a StringBuilder object that needs to be trimmed (i.e. all whitespace chars /u0020 and below removed from either end).

I can\'t seem to find a method in string

8条回答
  •  耶瑟儿~
    2021-01-11 11:35

    I made some code. It works and the test cases are there for you to see. Let me know if this is okay.

    Main code -

    public static StringBuilder trimStringBuilderSpaces(StringBuilder sb) {
    
        int len = sb.length();
    
        if (len > 0) {
    
                int start = 0;
                int end = 1;
                char space = ' ';
                int i = 0;
    
                // Remove spaces at start
                for (i = 0; i < len; i++) {
                    if (sb.charAt(i) != space) {
                        break;
                    }
                }
    
                end = i;
                //System.out.println("s = " + start + ", e = " + end);
                sb.delete(start, end);
    
                // Remove the ending spaces
                len = sb.length();
    
                if (len > 1) {
    
                    for (i = len - 1; i > 0; i--) {
                        if (sb.charAt(i) != space) {
                            i = i + 1;
                            break;
                        }
                    }
    
                    start = i;
                    end = len;// or len + any positive number !
    
                    //System.out.println("s = " + start + ", e = " + end);
                    sb.delete(start, end);
    
                }
    
        }
    
        return sb;
    }
    

    The full code with test -

    package source;
    
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.ArrayList;
    
    public class StringBuilderTrim {
    
        public static void main(String[] args) {
            testCode();
        }
    
        public static void testCode() {
    
            StringBuilder s1 = new StringBuilder("");
            StringBuilder s2 = new StringBuilder(" ");
            StringBuilder s3 = new StringBuilder("  ");
            StringBuilder s4 = new StringBuilder(" 123");
            StringBuilder s5 = new StringBuilder("  123");
            StringBuilder s6 = new StringBuilder("1");
            StringBuilder s7 = new StringBuilder("123 ");
            StringBuilder s8 = new StringBuilder("123  ");
            StringBuilder s9 = new StringBuilder(" 123 ");
            StringBuilder s10 = new StringBuilder("  123  ");
    
            /*
             * Using a rough form of TDD here. Initially, one one test input
             * "test case" was added and rest were commented. Write no code for the
             * method being tested. So, the test will fail. Write just enough code
             * to make it pass. Then, enable the next test. Repeat !!!
             */
            ArrayList ins = new ArrayList();
            ins.add(s1);
            ins.add(s2);
            ins.add(s3);
            ins.add(s4);
            ins.add(s5);
            ins.add(s6);
            ins.add(s7);
            ins.add(s8);
            ins.add(s9);
            ins.add(s10);
    
            // Run test
            for (StringBuilder sb : ins) {
                System.out
                        .println("\n\n---------------------------------------------");
                String expected = sb.toString().trim();
                String result = trimStringBuilderSpaces(sb).toString();
                System.out.println("In [" + sb + "]" + ", Expected [" + expected
                        + "]" + ", Out [" + result + "]");
                if (result.equals(expected)) {
                    System.out.println("Success!");
                } else {
                    System.out.println("FAILED!");
                }
                System.out.println("---------------------------------------------");
            }
    
        }
    
        public static StringBuilder trimStringBuilderSpaces(StringBuilder inputSb) {
    
            StringBuilder sb = new StringBuilder(inputSb);
            int len = sb.length();
    
            if (len > 0) {
    
                try {
    
                    int start = 0;
                    int end = 1;
                    char space = ' ';
                    int i = 0;
    
                    // Remove spaces at start
                    for (i = 0; i < len; i++) {
                        if (sb.charAt(i) != space) {
                            break;
                        }
                    }
    
                    end = i;
                    //System.out.println("s = " + start + ", e = " + end);
                    sb.delete(start, end);
    
                    // Remove the ending spaces
                    len = sb.length();
    
                    if (len > 1) {
    
                        for (i = len - 1; i > 0; i--) {
                            if (sb.charAt(i) != space) {
                                i = i + 1;
                                break;
                            }
                        }
    
                        start = i;
                        end = len;// or len + any positive number !
    
                        //System.out.println("s = " + start + ", e = " + end);
                        sb.delete(start, end);
    
                    }
    
                } catch (Exception ex) {
    
                    StringWriter sw = new StringWriter();
                    PrintWriter pw = new PrintWriter(sw);
                    ex.printStackTrace(pw);
                    sw.toString(); // stack trace as a string
    
                    sb = new StringBuilder("\nNo Out due to error:\n" + "\n" + sw);
                    return sb;
                }
    
            }
    
            return sb;
        }
    }
    

提交回复
热议问题