1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package Torello.Java; class ChompCallableBraces { static String run(String callableAsStr) { callableAsStr = callableAsStr.trim(); if (callableAsStr.charAt(0) != '{') throw new CallableBodyException( "Passed callable does not begin with a squiggly-brace '{', but rather a: '" + callableAsStr.charAt(0) + "'\n" + callableAsStr ); if (callableAsStr.charAt(callableAsStr.length() - 1) != '}') throw new CallableBodyException( "Passed callable does not end with a squiggly-brace '}', but rather a: '" + callableAsStr.charAt(0) + "'\n"+ callableAsStr ); // This Version does a single "String.substring(...)", meaning it is more efficient // because it is not doing any extra String copies at all. // // NOTE: There is an auto-pre-increment (and pre-decrement), in both of the while loops. // Therefore, sPos starts at 'zero' - even though the open-curly-brace is the // character at position 0, and the closed-curly-brace is at position length-1. int sPos = 0; int ePos = callableAsStr.length() - 1; int first = 1; // The character after the '{' (open-curly-brace) char tempCh = 0; // temp-var // If the callable-braces are on their own line, skip that first line. // If they are **NOTE** on their own first line, the first character returned will be // the first character of source-code. while ((sPos < ePos) && Character.isWhitespace(tempCh = callableAsStr.charAt(++sPos))) if (tempCh == '\n') { first = sPos + 1; break; } // Check for the "bizarre case" that the method body just doesn't contain any code. // This means that *EVERY CHARACTER* that was checked was white-space. Return a single // space character, and be done with it. if (sPos == ePos) return " "; // When this loop terminates, 'ePos' will be pointing to the first non-white-space // character at the tail end of the source-code / String (callableAsStr is a String of // source-code used in the JavaDoc package) while ((ePos > sPos) && Character.isWhitespace(callableAsStr.charAt(--ePos))); // Starts at the 'first-white-space' character in the first line of code, and ends at the // last non-white-space character in source-code String 'callableAsStr' return callableAsStr.substring(first, ePos + 1); } } |