1. C# / Говнокод #15940

    +143

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    public static string CapitalizeFirstLetter(this string s)
    {
        if (String.IsNullOrEmpty(s))
            throw new ArgumentException("Stirng is empty");
        return s.First().ToString().ToUpper() + String.Join("", s.Skip(1));
    }

    не ищем легких путей

    Запостил: baks, 07 Мая 2014

    Комментарии (55) RSS

    • показать все, что скрытоИх и не надо искать - мой фаллос уже нацелен в твой ротик. Только раскрыть челюсти.
      Ответить
    • if(s[0] >= 97 && s[0] <= 122)
        s[0] -= 32;
      Ответить
    • > не ищем легких путей
      А в шарпе есть легкие пути (какая-нибудь готовая функция)?
      Ответить
      • Готового нет, как и в других языках, но можно получше записать
        char.ToUpper(s[0]) + s.Substring(1);

        Все стянуто отсюда:
        http://stackoverflow.com/questions/4135317/make-first-letter-of-a-string-upper-case
        Ответить
        • >Готового нет, как и в других языках
          >в других языках
          В Ruby все есть!
          puts "hello".capitalize

          http://ideone.com/u1FiQt
          Ответить
          • да даже в еретическом пхп есть
            http://www.php.net/manual/ru/function.ucfirst.php
            и даже более того
            http://www.php.net/manual/ru/function.ucwords.php
            Ответить
        • Ну если в строке нету всяких суррогатов (в шарпе же джвухбайтный юникод в строках, как и в жабе?) и композитных символов аля ё̤, то сойдет.
          Ответить
      • В шарпе есть TextInfo.ToTitleCase. Но он преобразует все слова в строке: первая буква каждого слова станет заглавной, остальные - строчными. Зато работает с любым языком (если указать соответствующую культуру).
        Ответить
        • > если указать соответствующую культуру
          CultureInfo.SubCultureInfo.Punks
          Ответить
          • В принципе, можно и такую культуру создать :)
            Ответить
    • а что, в жабе примерно так и приходится делать
      Ответить
      • public static String CapitalizeFirstLetter(String s)
        {    
            try (PreparedStatement ps = connection.prepareStatement('select initcap(?)')) {
                ps.setString(1, s);
                ResultSet rs = ps.executeQuery();
                rs.next();
                return rs.getString(1);
            }
        }
        Ответить
        • Конгениально. База как облачный сервис для капитализации.
          Правда больше рнр-вей, т.к. на сайте много раз были примеры где пыхапешники инсертили, сортировали и выбирали.
          Ответить
          • > Правда больше рнр-вей
            Ну да, в труъ enterprise-level решении на жабе этот CapitalizeFirstLetter нужно вызывать не напрямую, а через HTTP/XML или SOAP интерфейс.

            Ну и connection pooling конечно же нужно добавить...
            Ответить
            • Ну и для труёвости нужно обязательно поюзать ORM, ибо вызывать запросы руками некошерно.
              Ответить
      • показать все, что скрытоГлотай же мою сперму.
        Ответить
    • if String.IsNullOrEmpty s then "" else (string s.[0].ToUpper()) + s.[1..]
      Ответить
      • Вместо всего что написано выше лучше писать так:
        s.[0..0].ToUpper() + s.[1..]
        Ответить
        • Не считая того что на Null проверку не делаю, но её в принципе считаю вредной. Пусть лучше кинет исключение.
          Ответить
        • Точка в s.[1..] и s.[0..0] случаем не лишняя? Странноватый какой-то синтаксис...
          Ответить
          • http://ideone.com/3pftqp

            open System
            let s = "bormand"
            printfn "Fixed nick name: %s." <| s.[0..0].ToUpper() + s.[1..]
            Ответить
            • Ой, так это F# а не C#.
              Ответить
              • А в сишарпе есть такие слайсы? O_o
                Ответить
                • Да кто ж его знает. Я почти поверил, что они там есть ;)
                  Ответить
                  • > if String.IsNullOrEmpty s then "" else
                    Конструкция явно не сишарпная куда ни глянь. о_О
                    Ответить
                    • > Конструкция явно не сишарпная куда ни глянь. о_О
                      Ну я с сишарпом на Вы, поэтому не особо удивился такой форме тернарника. Вот отсутствие скобок смутило, да. И точки перед [] тоже.

                      Кстати, а почему в F# перед [] ставится точка? Для общности?
                      Ответить
                      • Для простоты разбора наверное. [] - список
                        Ответить
                        • > [] - список
                          Хм. Ленивый надеюсь?

                          UPD: Судя по [1..] - всяко ленивый.
                          Ответить
                          • > Хм. Ленивый надеюсь?
                            Но зачем?
                            F# энергичный язык. Самое ленивое что есть в стандартной библиотеке это seq{...} - блок итераторов (IEnumerable)

                            В местном бусте для фшарпа (PowerPack) есть LazyList но он смотрится как школьная поделка впихнутая со стороны.
                            Ответить
                            • > Но зачем?
                              А как [1..] может быть не ленивым? Он же бесконечен и никак не влезет в память.
                              Ответить
                              • Как слайс конечного списка может быть бесконечным? Вы правильно не сделали в соседнем треде автообновление скриптов.
                                Ответить
                                • > Как слайс конечного списка может быть бесконечен?
                                  Дык s.[1..] это специальный синтаксис для слайсов, или же туда любой список канает?

                                  P.S. Могу ли я просто написать a = [1..], и что при этом произойдет? Получится кровь-кишки-распидорасило (память кончилась при построении списка), или просто ленивый список (аля IEnumerable)?
                                  Ответить
                                  • .[1..] только для слайсов.

                                    Не особо знаю язык, но даже seq{1..} не сработало:
                                    http://ideone.com/ZZYDOt
                                    Ответить
                                  • > или просто ленивый список (аля IEnumerable)?
                                    Ленивый список и энумерейбл совсем разные вещи.
                                    Ответить
                                    • > Ленивый список и энумерейбл совсем разные вещи.
                                      Ну не совсем. Ленивый иммутабельный список (если бы он был) вполне мог бы реализовывать интерфейс IEnumerable.

                                      > .[1..] только для слайсов.
                                      Ясно. Жаль. А хотя бы s.[1..5,6..9,11,15] можно написать?
                                      Ответить
                                      • s.[1..1,6..,*,..5] можно для многомерных что бы слайс получилось взять
                                        Ответить
                                        • > для многомерных
                                          Прикольно. А слайс это копия или же вьюха оригинальной коллекции? Через него можно что-то поменять в оригинале?

                                          Что-то в духе x[1:2] = [4,5,6], как в питоне.
                                          Ответить
                                          • http://ideone.com/ZO2OV4
                                            open System
                                            let mutable a = [|1..10|]
                                            a.[0]<-4
                                            a.[5..6]<-a
                                            printfn "%A" a
                                            Похоже вьюха. я хз как оно работает.
                                            Ответить
                                      • В скале возможно что-нибудь такое можно. там хорошо подошли к реализации функционала на уровне библиотеки, но в пределах разумного, а не на уровне вшивания в язык.
                                        Например obj.% param эквивалентно obj % param
                                        Или x -> y эквивалентно (x,y). Очевидно первое для введения операторов, а второе для красоты генерации мапов.
                                        Ответить
    • "Stirng is empty" - новый тип данных.
      Ответить

    Добавить комментарий