Рубрика «string» - 3

Я искал ответ на вопрос «что быстрее»

strcmp(in, "first") == 0

или

strlen(in) == 5 && in[0] == 'f' && in[1] == 'i' && in[2] == 'r' && in[3] == 's' && in[4] == 't'

И, кажется, нашёл…
Читать полностью »

в 14:54, , рубрики: java, string, метки: ,

Всем привет. Последние события в Украине как-то отбросили меня от хабра, но вот, все, более менее, наладилось и я, вернувшись к привычному ритму работы, вспомнил о парочке своих постов в черновиках. В связи с выходом 8-й версии явы, пост, возможно, уже несколько устарел, но не пропадать же добру.
Итак, как-то вечером, оптимизируя очередной кусочек кода — случайно заглянул в String и обнаружил, что класс строки уже не тот. Так как строка, пожалуй, один из самых распространенных типов, думаю многим будет интересно узнать об изменениях.

Оптимизирован метод String.split()

Метод split строки стал быстрее работать для односимвольного параметра. Теперь в методе вообще не будет использоваться регексп и будет применен indexOf в цикле.
Было:

public String[] split(String regex, int limit) {
        return Pattern.compile(regex).split(this, limit);
}

Стало:

public String[] split(String regex, int limit) {
    if (((regex.value.length == 1 && 
           ".$|()[{^?*+\".indexOf(ch = regex.charAt(0)) == -1) || ...)) {
            ...
            while ((next = indexOf(ch, off)) != -1) {
                ...
            }
            ...
            return result;
    }
    return Pattern.compile(regex).split(this, limit);
}
2 поля удалены

Начиная с 6-го апдейта 7-й явы из класса строки были удалены 2 поля:

private int offset;
private int count;

Как вы, наверное, помните эти поля использовались при вызове метода substring. Назначение полей — уменьшение сложности метода и попытка избежать создания нового массива символов строки используя ссылку на уже существующий массив. Что, в свою очередь, в некоторых ситуациях могло порождать известную утечку памяти. Теперь же размер строки на 8 байт меньше и проблема утечки навсегда решена.

Читать полностью »

На практике, задачи по объединении строк в одну попадаются достаточно часто. Весьма печально, но стандарт T-SQL не предусматривает возможности использовании строковых данных внутри агрегирующей функции SUM:

Msg 8117, Level 16, State 1, Line 1
Operand data type char is invalid for sum operator.

Хотя для решения подобного рода задач, для MySQL была добавлена функция GROUP_CONCAT, а в Oracle LISTAGG. В свою же очередь, SQL Server такого встроенного функционала пока не имеет.

Однако, не стоит рассматривать это как недостаток, поскольку возможности T-SQL позволяют выполнять конкатенации строк более гибко и эффективно за счет применения других конструкций, которые будут рассмотрены далее.
Читать полностью »

В работе на языке Python я частенько использую библиотеку Pytils для работы с русским текстом, и мне очень не хватало этой библиотеки при работе на PHP. Возможно, я искал плохо, но все, что я находил, не предоставляло подобных возможностей либо не слишком отвечало моим понятиям о чистом коде.

И вот, однажды я решил портировать библиотеку на PHP, и теперь хочу поделиться ею с народом и очень надеюсь на помощь в ее улучшении: буду рад советам, баг-репортам и особенно pull-реквестам. Библиотека находится на GitHub'е: github.com/Andre-487/php_rutils

Возможности библиотеки

PHP RUtils — порт Pytils на PHP. Это утилиты для работы с русским текстом. Утилиты разделены на следующие модули (классы):

  • Numeral — работа с числами: склонение существительных в зависимости от количества, числа прописью, суммы денег в рублях и копейках прописью.
  • Dt — работа с датами: расширение формата дат PHP русскими именами месяцев, дней недели; временные периоды (например, 24 976 дней назад).
  • Translit — транслитерация, подготовка строк для использования в URL'ях, именах файлов.
  • Typo — небольшой набор правил типографики простого текста.

Читать полностью »

От переводчика. На Хабре уже неоднократно публиковались статьи как по Юникоду, так и по строкам в .NET. Однако статьи о Юникоде применительно к .NET ещё не было, поэтому я решил перевести статью общепризнанного гуру .NET Джона Скита. Она закрывает обещанный мною цикл из трёх статей-переводов Дж. Скита, посвящённых строкам в .NET. Как всегда, буду рад замечаниям и исправлениям.
Логотип Юникода

Введение

Тема данной статьи довольно обширна, и не ждите от неё детального и глубокого разбора всех нюансов. Если вы полагаете, что достаточно хорошо разбираетесь в Юникоде, кодировках и т.д., эта статья может быть для вас почти или даже полностью бесполезной. Тем не менее, довольно много людей не понимают, чем различаются двоичные и текстовые данные (binary и text), или что такое кодировка символов. Именно для таких людей и написана данная статья. Несмотря на, в общем-то, поверхностное описание, в ней затрагиваются некоторые сложные моменты, однако это сделано скорее для того, чтобы читатель имел представление об их существовании, нежели чтобы дать детальные разъяснения и руководства к действию.
Читать полностью »

Из-за того, что в PHP при сравнении строк оператор "==" пытается сначала преобразовать их в числа [1][2] (даже, если оба операнда — строки), результат порой может оказаться неожиданным:

<?php
var_dump('123' == '       123'); // true
var_dump('1e3' == '1000'); // true
var_dump('+74951112233' == '74951112233'); // true
var_dump('00000020' == '0000000000000000020'); // true
var_dump('0X1D' == '29E0'); // true
var_dump('0xafebac' == '11529132'); // true
var_dump('0xafebac' == '0XAFEBAC'); // true
var_dump('0xeb' == '+235e-0'); // true
var_dump('0.235' == '+.235'); // true
var_dump('0.2e-10' == '2.0E-11'); // true
var_dump('61529519452809720693702583126814' == '61529519452809720000000000000000'); // true в php < 5.4.4

Читать полностью »

Вступление

Это мой первый перевод статьи. Решил посвятить его Java, как ни странно. В статье рассказывается об изменениях строкового типа данных, которые произошли в Java.

ВАЖНО: 17 апдейт 7 версии Java не содержит изменений, описанных в этой статье.

Разделение массива символов char[]

В настоящей реализации класса String имеется 4 экземплярных поля: массив символов char[] value — содержащий символы строки, int offset — индекс первого используемого символа в массиве value, int count — количество используемых символов и int hash — кэшированное значение вычисленного хеш кода для данной строки. Как вы могли заметить, в большинстве случаев строка будет иметь значения offset = 0 и count = value.length. Единственное исключение из этого правила, возможно, когда строка создается путем вызова метода viaString.substring или любым методом, который использует данный метод (например, split).
Читать полностью »

Представим, что нам нужно что-нибудь сделать со строками в .net. Что-то не очень сложное, но и не совсем простое. Например, для правильного форматирования, расставить пробелы после запятых в тексте. Что же предлагает .net из коробки?
Что-то такое:

string str = "...";
str.Replace(",", ", ");

Постойте, но мы же хотели расставлять пробелы, а не заменять запятые!..
Читать полностью »

Эффективная конкатенация строк в .NET
Для программистов на платформе .NET одним из первых советов, направленных на повышение производительности их программ, является «Используй StringBuilder для конкатенации строк». Как и «Использование исключений затратно», утверждение о конкатенации часто неправильно понимается и превращается в догму. К счастью, оно не столь деструктивно, как миф о производительности исключений, но встречается заметно чаще.

Было бы неплохо, если бы вы перед прочтением данной статьи прочли мою предыдущую статью о строках в .NET. И, во имя удобочитаемости, дальше я буду обозначать строки в .NET просто строками, а не «string» или «System.String».

Я включил эту статью в список статей, посвящённых .NET Framework в общем, а не в список C#-специфичных статей, так как полагаю, что все языки на платформе .NET под капотом содержат один и тот же механизм конкатенации строк.
Читать полностью »

в 10:23, , рубрики: .net, string

image
От переводчика: Джон Скит написал несколько статей о строках, и данная статья является первой, которую я решил перевести. Дальше планирую перевести статью о конкатенации строк, а потом — о Юникоде в .NET.

Тип System.StringC# имеющий алиас string) является одним из наиболее часто используемых и важных типов в .NET, и вместе с тем одним из самых недопонимаемых. Эта статья описывает основы данного типа и развенчивает сложившиеся вокруг него мифы и непонимания.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js