Revision: 14067
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 10:08 by monkey103
                            
                            Updated Code
/* instead of 
Pattern p = Pattern.compile("[\\s]+$");
// start timing
p.matcher(str).replaceAll("");
The alternative method below averages 400ns, compared to 3500ns of the regex above */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also faster (although memory usage is worse) - averages 500ns */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14066
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 10:07 by monkey103
                            
                            Updated Code
/* instead of 
Pattern p = Pattern.compile("[\\s]+$");
// start timing
p.matcher(str).replaceAll("");
The alternative method below averages 400ns, compared to the regex above*/
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also faster (although memory usage is worse) - averages 500ns */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14065
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 10:06 by monkey103
                            
                            Updated Code
/* instead of 
Pattern p = Pattern.compile("[\\s]+$");
// start timing
p.matcher(str).replaceAll("");
This alternative method averages 400ns */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also faster (although memory usage is worse) - averages 500ns */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14064
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:52 by monkey103
                            
                            Updated Code
/* instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("") - averages 400ns */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also faster (although memory usage is worse) - averages 500ns */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14063
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:51 by monkey103
                            
                            Updated Code
/* instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("") - averages 300ns */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also ~6x faster (although memory usage is worse) - avgs 400ns */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14062
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:48 by monkey103
                            
                            Updated Code
/* instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("") */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also ~6x faster (although memory usage is worse) */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14061
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:48 by monkey103
                            
                            Updated Code
/* instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("") */
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
/* Similarly, using a StringCharacterIterator is also ~6x faster (although memory usage is worse */
	public static String trimEnd(String str) {
		StringCharacterIterator iter = new StringCharacterIterator(str);
		int len = str.length();
		for (char c = iter.last(); c != CharacterIterator.DONE && c <= ' '; c = iter
				.previous()) {
			len --;
		}
		return ((len < str.length())) ? str.substring(0, len)
				: str;
	}
                                
                            Revision: 14060
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:46 by monkey103
                            
                            Updated Code
// instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("")
	public static String trimEnd(String str) {
		int len = str.length();
		char[] val = str.toCharArray();
		while ((0 < len) && (val[len - 1] <= ' ')) {
			len--;
		}
			
		return (len < str.length()) ? str.substring(0, len) : str;
	}
                                
                            Revision: 14059
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at May 18, 2009 09:44 by monkey103
                            
                            Updated Code
// instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("")
public static String trimEnd(String str) {
	int len = str.length();
	int st = 0;
	char[] val = str.toCharArray();
	while ((st < len) && (val[st  + len - 1] <= ' ')) {
		len--;
	}
		
	return ((st > 0) || (len < str.length())) ? str.substring(st, len) : str;
}
                                
                            Revision: 14058
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at May 18, 2009 09:38 by monkey103
                            
                            Initial Code
// instead of Pattern p = Pattern.compile("[\\s]+$").matcher(str).replaceAll("")
public static String trimEnd(String str) {
		int len = str.length();
		int st = 0;
		int off = 0; /* avoid getfield opcode */
		char[] val = str.toCharArray(); /* avoid getfield opcode */
		while ((st < len) && (val[off + len - 1] <= ' ')) {
			len--;
		}
		
		return ((st > 0) || (len < str.length())) ? str.substring(st, len) : str;
	}
                                Initial URL
Initial Description
Works almost 9x faster than a regex pattern, and memory usage is better (because Matcher objects aren't created).
Initial Title
Trim trailing whitespace
Initial Tags
Initial Language
Java