Как я могу добавить подчеркивание перед каждой прописной буквой в Строке Java?

LET самостоятельно не реальный примитив в Язык Функционального программирования , так как он может замененный LAMBDA. Как это:

(let ((a1 b1) (a2 b2) ... (an bn))
  (some-code a1 a2 ... an))

подобно [1 122]

((lambda (a1 a2 ... an)
   (some-code a1 a2 ... an))
 b1 b2 ... bn)

, Но

(let* ((a1 b1) (a2 b2) ... (an bn))
  (some-code a1 a2 ... an))

подобно [1 124]

((lambda (a1)
    ((lambda (a2)
       ...
       ((lambda (an)
          (some-code a1 a2 ... an))
        bn))
      b2))
   b1)

, можно вообразить, который является более простой вещью. LET а не LET*.

LET делает код, понимающий легче. Каждый видит набор привязки, и можно считать каждую привязку индивидуально без потребности понять top-down/left-right поток 'эффектов' (повторные переплетения). Используя [1 110] сигналы программисту (тот, который читает код), что привязка весьма зависима, но существует некоторый нисходящий поток - который усложняет вещи.

язык Common LISP имеет правило, что значения для привязки в [1 111] вычисляются слева направо. Как значения для вызова функции оценены - слева направо. Так, LET концептуально более простой оператор, и он должен использоваться по умолчанию.

Типы в [1 113] ? Используются довольно часто. Существуют некоторые примитивные формы описания типа, которые легко помнить. Пример:

(LOOP FOR i FIXNUM BELOW (TRUNCATE n 2) do (something i))

Выше объявляет, что переменная i fixnum.

Richard P. Gabriel опубликовал свою книгу по сравнительным тестам Lisp в 1985, и в то время эти сравнительные тесты также использовались с неCL, Шепелявит. Сам язык Common LISP был совершенно новым в 1985 - книга CLtL1, которая описала язык, был просто опубликован в 1984. Неудивительный реализации не были очень оптимизированы в то время. Реализованная оптимизация была в основном тем же (или меньше), который реализации прежде имели (как MacLisp).

, Но для [1 116] по сравнению с [1 117] основное различие - то, что код с помощью [1 118] легче понять для людей, так как обязательные пункты независимы друг от друга - тем более, что это - плохой стиль для использования в своих интересах левых к правильной оценке (не устанавливающий переменные как побочный эффект).

6
задан Chii 20 October 2009 в 08:05
поделиться

3 ответа

Да, регулярные выражения могут сделать это за вас:

"HelloWorldMyNameIsCarl".replaceAll("(.)([A-Z])", "$1_$2")

Выражение [AZ] сопоставит все буквы верхнего регистра и поместит их во вторую группу. Вам нужна первая группа . чтобы избежать замены первой буквы «H».

Как указал Piligrim , это решение не работает для произвольных языков. Чтобы поймать любую заглавную букву, определенную стандартным стандартом Unicode, нам понадобится подсвойство Unicode 4.1 \ p {Lu} , которое соответствует всем заглавным буквам. Таким образом, более общее решение выглядит как

"HelloWorldMyNameIsCarl".replaceAll("(.)(\\p{Lu})", "$1_$2")

Спасибо, Пилигрим.

35
ответ дан 8 December 2019 в 02:19
поделиться

Это домашнее задание? Для начала:

  1. Создайте StringBuffer
  2. Итерируйте по вашей строке.
  3. Убедитесь, что каждый символ написан в верхнем регистре (поможет класс java.lang.Character )
  4. Добавьте подчеркивание к buffer, если это так.
  5. Добавить текущий символ в буфер.
3
ответ дан 8 December 2019 в 02:19
поделиться

Вот подсказка, которая поможет вам обдумать возможное решение:

  1. Найдите способ разбить строку на части каждой заглавной буквой
  2. Присоедините разделенные строки назад с подчеркиванием между их

Полезные ключевые слова:

  • split
  • регулярное выражение / регулярное выражение
2
ответ дан 8 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: