[ https://issues.apache.org/jira/browse/LANG-604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12848141#action_12848141 ]
Kai Gülzau commented on LANG-604: --------------------------------- Ok, good point. This way you don't loose performance for trimmed strings. But the loop doesn't check all chars now: isBlank(" X ") returns true! There are two fixes: a) ... for (int m = strLen / 2, i = 1; m < strLen; m++, i++) { ... Here one char (at strLen / 2) is double checked for even length blank strings. b) ... int mid = strLen / 2; for (int i = 1, m = mid; m < strLen; m++, i++) { if (!Character.isWhitespace(cs.charAt(m)) || ( i < mid && !Character.isWhitespace(cs.charAt(i))) ) { ... Here we loose some minor performance on very large blank strings due to the extra check in the loop. I opt for b). Kai > Optimize isBlank() for untrimmed strings > ---------------------------------------- > > Key: LANG-604 > URL: https://issues.apache.org/jira/browse/LANG-604 > Project: Commons Lang > Issue Type: Improvement > Components: lang.* > Affects Versions: 3.0 > Reporter: Kai Gülzau > Priority: Minor > > Change isBlank() to start iteration in the middle of the String. > So you get better performance for untrimmed Strings like " dummy ". > Here is my proposal: > public static boolean isBlank(CharSequence cs) { > int strLen; > if (cs == null || (strLen = cs.length()) == 0) { > return true; > } > int mid = strLen / 2, i = mid; > for (; i < strLen; i++) { > if (!Character.isWhitespace(cs.charAt(i))) { > return false; > } > } > for (i = 0; i < mid; i++) { > if (!Character.isWhitespace(cs.charAt(i))) { > return false; > } > } > return true; > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.