/* * Copyright (C) 2009, Google Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * - Neither the name of the Git Development Community nor the * names of its contributors may be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.spearce.jgit.util; /** Miscellaneous string comparison utility methods. */ public final class StringUtils { private static final char[] LC; static { LC = new char['Z' + 1]; for (char c = 0; c < LC.length; c++) LC[c] = c; for (char c = 'A'; c <= 'Z'; c++) LC[c] = (char) ('a' + (c - 'A')); } /** * Convert the input to lowercase. * <p> * This method does not honor the JVM locale, but instead always behaves as * though it is in the US-ASCII locale. Only characters in the range 'A' * through 'Z' are converted. All other characters are left as-is, even if * they otherwise would have a lowercase character equivilant. * * @param c * the input character. * @return lowercase version of the input. */ public static char toLowerCase(final char c) { return c <= 'Z' ? LC[c] : c; } /** * Convert the input string to lower case, according to the "C" locale. * <p> * This method does not honor the JVM locale, but instead always behaves as * though it is in the US-ASCII locale. Only characters in the range 'A' * through 'Z' are converted, all other characters are left as-is, even if * they otherwise would have a lowercase character equivilant. * * @param in * the input string. Must not be null. * @return a copy of the input string, after converting characters in the * range 'A'..'Z' to 'a'..'z'. */ public static String toLowerCase(final String in) { final StringBuilder r = new StringBuilder(in.length()); for (int i = 0; i < in.length(); i++) r.append(toLowerCase(in.charAt(i))); return r.toString(); } /** * Test if two strings are equal, ignoring case. * <p> * This method does not honor the JVM locale, but instead always behaves as * though it is in the US-ASCII locale. * * @param a * first string to compare. * @param b * second string to compare. * @return true if a equals b */ public static boolean equalsIgnoreCase(final String a, final String b) { if (a == b) return true; if (a.length() != b.length()) return false; for (int i = 0; i < a.length(); i++) { if (toLowerCase(a.charAt(i)) != toLowerCase(b.charAt(i))) return false; } return true; } private StringUtils() { // Do not create instances } }