Вдохновленный Jon Skeet, версия нецикла, что удар привычки Ваш стек. Также полезная начальная точка, если Вы хотите использовать платформу соединения ветвления.
public static int countOccurrences(CharSequeunce haystack, char needle) {
return countOccurrences(haystack, needle, 0, haystack.length);
}
// Alternatively String.substring/subsequence use to be relatively efficient
// on most Java library implementations, but isn't any more [2013].
private static int countOccurrences(
CharSequence haystack, char needle, int start, int end
) {
if (start == end) {
return 0;
} else if (start+1 == end) {
return haystack.charAt(start) == needle ? 1 : 0;
} else {
int mid = (end+start)>>>1; // Watch for integer overflow...
return
countOccurrences(haystack, needle, start, mid) +
countOccurrences(haystack, needle, mid, end);
}
}
(Правовая оговорка: Не протестированный, не скомпилированный, не разумный.)
, Возможно, лучшее (однопоточный, никакая поддержка суррогатной пары) способ записать его:
public static int countOccurrences(String haystack, char needle) {
int count = 0;
for (char c : haystack.toCharArray()) {
if (c == needle) {
++count;
}
}
return count;
}
Я думаю, что людям трудно разобраться в XSLT (и хвалить его), потому что он функциональный и декларативный по своей природе, в отличие от программирования на C # или Java. Навигация по документам может оказаться сложной, если операторы XPATH станут умными - хотя это особенность XPATH, а не XSLT. XPATH обычно усложняется, когда во время разработки вы не знаете точную структуру документа, поэтому вы начинаете опрашивать братьев, сестер, потомков и предков. Именно тогда люди, унаследовавшие сложный XSLT, начинают задумываться о смене карьеры!
С XSLT это очень «правильный инструмент для правильной работы». Он разработан для чрезвычайно быстрого и эффективного преобразования XML-документа в другой XML-документ. XSLT почти наверняка является лучшим инструментом для этой цели из-за его расширяемости, того факта, что он был написан для этой цели, широкой поддержки его в xml-процессорах по всем направлениям и, если я еще не упомянул об этом, производительности. Распространенные варианты использования:
Отличной реализацией технологии xslt является проект apache-cocoon, который преобразует XML-документы в несколько выходных форматов, включая html, excel, изображения диаграмм, PDF-файлы с расширяемой архитектурой плагинов. Мы часто используем его для нашей платформы отчетности, и он работает очень хорошо. Когда разработчики начинают с этого, они находят те же знакомые проблемы. Когда они преодолевают их, они обычно пишут, что я здесь.
Однажды я работал с парнем, который не хотел работать с (и изучать) XSLT, и в итоге представил клиенту демо, которое заняло более 20 секунд. для рендеринга страницы. Когда я наконец убедил его использовать XSLT-преобразование вместо его тупого DOM-кода, это заняло менее секунды.
Мне нравится xslt, и я использую его довольно часто. Если вы мыслите в терминах функционального программирования (то есть переменных, устанавливаемых один раз, аналогично F # и т. Д.), То он чрезвычайно универсален. Я регулярно использую его для преобразования данных, представления (в частности [x] html) и генерации универсального кода .
Определенно , сильно связанных с программированием; никто, кроме программиста, не стал бы его разглядывать - но это очень мощный инструмент.
У меня есть несколько файлов xslt (разделенных на несколько xsl: import
/ xsl: include
файлов), то есть существенно больше, чем 800, которые вы упомянули в сообщении ... это действительно может (при правильном использовании) быть полнофункциональной средой.
Примечания:
Одна особенно полезная особенность xslt (в виде отдельного файла) заключается в том, что он позволяет изменять преобразование без перестройки кода. Пример генерации кода взят из моего проекта с открытым исходным кодом; Я знаю нескольких пользователей, которые окунулись и настроили генерацию кода в соответствии со своими местными стандартами. Одно использование даже дошло до написания преобразования для всего второго языка - и все это без касания двоичных файлов.
Мне лично не нравится XSLT, потому что он, кажется, сочетает в себе несколько вещей, которые в целом не нравятся сообществу разработчиков:
Раньше я работал с XSLT, и меня это не особо заботило, потому что я нашел его чрезвычайно многословным для той простой задачи, которую я хотел выполнить.
Просто из любопытства, что сделали ваши 800 строк XSLT?
XSLT - это действительно мощный инструмент в арсенале разработчиков. Я все время использую его для генерации кода. Счетчики производительности , уровень доступа к данным, интерфейсы REST и т. Д. ничего повторяющегося.
Как язык, у него есть свои особенности, но как инструмент он бесценен.
Многие программисты не имеют опыта функционального программирования. XSLT во многом напоминает функциональное программирование и новую, чужую парадигму для изучения.
Изучение незнакомой парадигмы программирования может быть сложной задачей, не говоря уже об изучении незнакомой парадигмы программирования, выраженной в XML.
Код, написанный на языке функционального программирования. язык обычно минималистичен. XML редко бывает минималистичным. Так что люди, которые знают функциональное программирование и ценят его минимализм, должны отказаться от этого минимализма.
Я лично считаю, что он очень подходит для определенных типов задач программирования. Для меня в определенных ситуациях намного проще поддерживать форму с помощью XSLT, чем переписывать / перекомпилировать / повторно развертывать изменения кода. Хотя XSLT - не единственный способ добиться этого, я не нашел других решений для этих случаев, которые были бы намного чище и проще.
Он имеет свое место. Как и все остальное, при неправильном использовании он превращается в беспорядок кода, как и любой другой язык. При правильном использовании он может быть хорошим дополнением или решением проблемы программирования.
XSLT очень мощный, если то, что вы хотите с ним делать, соответствует тому, для чего он нужен. Однако поддержка чужого XSLT может быть немного сложной. Это язык программирования, но это также XML-файл, поэтому его трудно понять, даже если он изложен чисто и с адекватными комментариями.
match
и для циклов
с переменными. Посмотрите http://www.worldofwarcraft.com/index.xml и http: // www. wowarmory.com/index.xml, если у вас есть браузер с поддержкой XSLT (подходит FF 3). Они полностью написаны на клиентской стороне XSLT с базовым XML. Это делает очистку этих сайтов ДЕЙСТВИТЕЛЬНО простой и приятной, и они вынуждены хранить данные и представление отдельно. Прекрасным примером являются страницы их персонажей http://www.wowarmory.com/character-achievements.xml?r=Mal%27Ganis&cn=Vosk&gn=Juggernaut
Это пример превращения XML в язык программирования. Фу. Я бы хотел, чтобы люди этого не делали. У нас уже есть совершенно хорошие языки программирования, и они справляются с этим намного лучше, чем XML.
Я считаю, что люди, которые жалуются на XSLT, злоупотребляют им. Например, я считаю, что использовать его в качестве языка шаблонов HTML для CMS - ужасная идея, если только ваши данные уже не в XML. Эти люди могут жаловаться, что XSLT некрасивый, многословный или что-то еще, но это потому, что они используют его по неправильным причинам.
Наша библиотека CMS в основном состоит из таблиц стилей html, которые делают почти все. Наши данные, конечно, изначально являются XML. Некоторые из наших программистов не понимают парадигмы функционального программирования. Ваш первый опыт может привести к тому, что сложные шаблоны будут неправильно использовать итерационные функции XSLT. Первое, что вы должны сказать программисту, это не использовать для каждого оператора и не перемещаться по осям xpath. Если они научатся воздерживаться, они могут научиться понимать концепции шаблонов.