Есть ли встроенная функция IsLowerCase () в .NET? - PullRequest
1 голос
/ 23 декабря 2008

Есть ли встроенный IsLowerCase() в .NET?

Ответы [ 8 ]

7 голосов
/ 23 декабря 2008
public static bool IsLowerCase( this string text ) {
    if ( string.IsNullOrEmpty( text ) ) { return true; }
    foreach ( char c in text )
        if ( char.IsLetter( c ) && !char.IsLower( c ) )
            return false;

    return true;
}


"someString".IsLowerCase();
6 голосов
/ 23 декабря 2008

Вы имеете в виду Char.IsLower(ch);?

3 голосов
/ 23 декабря 2008

Имейте в виду, что локализация делает этот вопрос нетривиальным. Первый пример хорош, если вам все равно:

string s = ...
s.All(c => char.IsLower(c));

Если вам все равно, сделайте это так:

s.ToLower(CultureInfo.CurrentUICulture) == s;

Это дает вам возможность заняться вопросами культуры.

2 голосов
/ 23 декабря 2008

Редактировать: не видел фактического значения вашего вопроса. Вы можете использовать:

char.IsLower(c);

Насколько легко конвертировать между делами:

Конечно, это:

MSDN говорит :

 string upper = "CONVERTED FROM UPPERCASE";
 Console.WriteLine(upper.ToLower());

Это часть класса string.

Существует также класс TextInfo:

CultureInfo cultureInfo   = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;

Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));

Что позволяет более разнообразно менять колпачки и все такое (как ToTitleCase).

1 голос
/ 23 декабря 2008

Как уже упоминали другие, вы можете легко сделать это для одного символа, используя char.IsLower (ch)

Но расширить String-примитив не составит особого труда. Вы можете относительно просто расширить BCL, используя пространство имен Runtime.CompilerServices:

Imports System.Runtime.CompilerServices
Module CustomExtensions

    <Extension()> _
    Public Function IsLowerCase(ByVal Input As String) As Boolean
        Return Return Input.All(Function(c) Char.IsLower(c))
    End Function

End Module

Или в C # это будет:

using System.Runtime.CompilerServices; 
static class CustomExtensions 
{ 
    public static bool IsLowerCase(this string Input) 
    { 
        return Input.All(c => char.IsLower(c)); 
    }
} 

Теперь вы можете понять это, используя:

Console.WriteLine("ThisIsMyTestString".IsLowerCase())

Что вернет false, потому что в строке есть символы верхнего регистра.

0 голосов
/ 23 декабря 2008

Ребята, почему это злоупотребление LINQ (ToList (), ToArray (), All (), Any (), ...)? Я тоже люблю LINQ и лямбды, но в этом случае я думаю, что старый добрый foreach - это то, что нам нужно. Смотрите ответ TcKs как ссылку - но мы можем добиться большего, если уберем лишнее

char.IsLetter( c )

потому что IsLower () выполняет ту же проверку.

0 голосов
/ 23 декабря 2008

balabaster, пожалуйста, не используйте этот подход с FindAll / Count. Все, что вам нужно, это

return Input.ToList().Exists(c => Char.IsUpper(c));

Это остановит итерацию для первого символа в верхнем регистре. Find создаст новый список, и вы используете только свойство Count. Если у нас есть длинная строка в верхнем регистре, вы получите копию исходной строки.

0 голосов
/ 23 декабря 2008

Как насчет:

public bool IsLower(string TestString)
    {
        if (String.IsNullOrEmpty(TestString))
        {
            return true;
        }

        string testlower = TestString.ToLowerInvariant();

        if (String.Compare(TestString, testlower, false) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }


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