Java: эквивалентно C's strnicmp? (оба запускаются с помощью ignoreCase) - PullRequest
8 голосов
/ 08 апреля 2010
 String string1 = "abCdefGhijklMnopQrstuvwYz";
 String string2 = "ABC";

Я использовал string1.startsWith (string2), который возвращал бы false в приведенном выше примере, но теперь мне нужно игнорировать чувствительность к регистру, и нет String.startsWithIgnoreCase ().

Кроме того,

 string1.toLowerCase.startsWith(string2.toLowerCase());

Есть ли эффективный способ узнать, начинается ли строка string1 со строки string2 без учета регистра?

Ответы [ 5 ]

13 голосов
/ 08 апреля 2010

Метод regionMatches имеет регистрозависимый параметр.

7 голосов
/ 09 апреля 2010

Использовать библиотеку StringUtils.

    StringUtils.startsWithIgnoreCase("abCdefGhijklMnopQrstuvwYz", "ABC"); // true

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#startsWithIgnoreCase%28java.lang.String,%20java.lang.String%29

3 голосов
/ 08 апреля 2010

Как насчет этого:

string2.equalsIgnoreCase(string1.substring(0, string2.length())
2 голосов
/ 23 апреля 2013
string.toLowerCase().startsWith(string2.toLowerCase())
0 голосов
/ 08 апреля 2010
public static boolean startsWithIgnoreCase(String s, String w)
    {
        if (w==null)
            return true;

        if (s==null || s.length()<w.length())
            return false;

        for (int i=0;i<w.length();i++)
        {
            char c1=s.charAt(i);
            char c2=w.charAt(i);
            if (c1!=c2)
            {
                if (c1<=127)
                    c1=Character.toLowerCase(c1);
                if (c2<=127)
                    c2=Character.toLowerCase(c2);
                if (c1!=c2)
                    return false;
            }
        }
        return true;
    }

Кстати, вы уверены, что вам нужна эффективность здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...