Информация об изменениях

Сообщение Re: Алгоритм сокращения ников от 01.10.2016 4:04

Изменено 01.10.2016 4:14 Vladek

Здравствуйте, Vladek, Вы писали:

V>А где можно увидеть актуальный алгоритм сокращения ников при цитировании?


V>Тут увидел только формирование заголовка сообщения: https://github.com/rsdn/janus/blob/master/Janus/Core/JanusProtocolSupport/JanusFormatMessage.cs (метод ReSubj)


Пока сделал так, думаю сойдёт:
private static string ShortUsername(string username)
{
    if (username.Length <= 3)
        return String.Concat(username.Where(ch => Char.IsSeparator(ch) == false));

    if (username.Any(Char.IsSeparator) == false)
        return String.Concat(username.Where(Char.IsUpper).Take(3));

    return String.Concat(username
        .Where((ch, i) => Char.IsSeparator(ch) == false && (i == 0 || Char.IsSeparator(username[i - 1])))
        .Take(3));
}
Re: Алгоритм сокращения ников
Здравствуйте, Vladek, Вы писали:

V>А где можно увидеть актуальный алгоритм сокращения ников при цитировании?


V>Тут увидел только формирование заголовка сообщения: https://github.com/rsdn/janus/blob/master/Janus/Core/JanusProtocolSupport/JanusFormatMessage.cs (метод ReSubj)


Пока сделал так, думаю сойдёт:
private static string ShortUsername(string username)
{
    if (username.Length <= 3)
        return String.Concat(username.Where(ch => Char.IsSeparator(ch) == false));

    if (username.Any(Char.IsSeparator))
    {
        var caps = String.Concat(username
            .Where((ch, i) => Char.IsSeparator(ch) == false && (i == 0 || Char.IsSeparator(username[i - 1])))
            .Take(3)).ToUpper();

        return caps;
    }

    var shortName = String.Concat(username.Where(Char.IsUpper).Take(3));
    return shortName.Length > 0 ? shortName : username.Substring(0, 1).ToUpper();
}