Elettracompany.com

Компьютерный справочник
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Интерполяция строк java

Интерполяция строковых переменных Java

Струнное здание в Java-м меня смущает. Я ненавижу делать такие вещи, как:

Или, используя StringBuilder, что-то вроде этого:

Конечно, я что-то упускаю. Там должен быть GOT лучший способ. Что-то вроде:

5 Ответов

Если вы используете Java 5 или выше, вы можете использовать String.format :

Подробности смотрите в разделе Formatter .

Обратите внимание, что в Java нет интерполяции переменных. Интерполяция переменной — это подстановка переменной с ее значением внутри строки. Пример в Ruby:

Интерпретатор Ruby автоматически заменяет переменные своими значениями внутри строки. На то, что мы будем делать интерполяцию, намекают сигиловые символы. В Ruby, это #<>. В Perl это может быть $, % или @. Java будет печатать только такие символы, это не расширит их кругозор.

Интерполяция переменных не поддерживается в Java. Вместо этого, мы есть форматирование строк.

В Java мы строим новую строку, используя метод String.format(). Результат один и тот же, но методы разные.

Edit As of 2019, JEP 326: Raw String Literals упоминает, что интерполяция строк может быть добавлена в язык в будущем.

Необработанные строковые литералы напрямую не поддерживают интерполяцию строк. Интерполяция может быть рассмотрена в будущем JEP.

Просто добавить, что есть также java.text.MessageFormat с преимуществом наличия числовых индексов аргументов.

Добавление 1-го примера из документации

Вы можете использовать Kotlin, супер (уступка) Java для JVM, он имеет хороший способ интерполяции строк, таких как ES5, Ruby и Python.

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

Я хочу скрыть важные значения строковых переменных, такие как пароли, имя пользователя, ip и url, и т.д. В .Net приложении (C#,VB.NET) В process explorer мы можем просмотреть строку в образе или.

Я пытаюсь найти эффективный способ, чтобы в нижнем регистре все содержимое строковых переменных в Stata. Я знаю, как сделать это по одной переменной за раз (используя пример переменной с именем.

Я пытаюсь (в VBA) определить большое количество строковых переменных. Грубая сила была бы : Dim Port1 as String Dim Port2 as String etc… Неприятно для скажем 100 переменных. Должно быть более.

Я пытаюсь создать оболочку, которая наследуется от интерфейса. Я смог реализовать методы из интерфейса без проблем, но когда я пытаюсь сделать это для строковых переменных, я постоянно получаю.

Я хочу, чтобы drop большое количество строковых переменных, которые содержат слово Other в своих наблюдениях. Таким образом, я попробовал следующий цикл для drop всех переменных: foreach var of.

У меня есть более 27 000 000 строковых переменных в массиве. Когда я добавляю строку к другой, скорость значительно снижается. мой код таков: //public string[] part2 = < . string Str1; string.

Я инициализирую множество строковых переменных следующим образом: a, b, c, d, e, f, g, h = , , , , , , , Вы можете видеть, что это выглядит не очень хорошо (Более того, переменные имеют более.

Мне интересно, можно ли поместить буквы из функции getline в 2 отдельных строковых переменных, извините, если это трудно понять, но я объясню это дальше. Допустим, у меня есть переменная ‘string.

Возможный Дубликат : Интерполяция по массиву (или двум ) У меня есть набор файлов CSV, которые содержат точки функции 2D. другими словами, у меня есть четыре файла CSV, каждый из которых является.

Я не могу заставить этот, казалось бы, простой пример работать в Ansible 1.8.3. Интерполяция переменных не влияет на имя задачи. Все примеры , которые я видел, кажется, предполагают, что это должно.

Строки

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Есть ряд улучшений и новых методов для строк.

Начнём с, пожалуй, самого важного.

Строки-шаблоны

Добавлен новый вид кавычек для строк:

Основные отличия от двойных «…» и одинарных ‘…’ кавычек:

В них разрешён перевод строки.

Заметим, что пробелы и, собственно, перевод строки также входят в строку, и будут выведены.

Можно вставлять выражения при помощи $ <…>.

Как видно, при помощи $ <…>можно вставлять как и значение переменной $ , так и более сложные выражения, которые могут включать в себя операторы, вызовы функций и т.п. Такую вставку называют «интерполяцией».

Функции шаблонизации

Можно использовать свою функцию шаблонизации для строк.

Название этой функции ставится перед первой обратной кавычкой:

Эта функция будет автоматически вызвана и получит в качестве аргументов строку, разбитую по вхождениям параметров $ <…>и сами эти параметры.

В примере выше видно, что строка разбивается по очереди на части: «кусок строки» – «параметр» – «кусок строки» – «параметр».

  • Участки строки идут в первый аргумент-массив strings .
  • У этого массива есть дополнительное свойство strings.raw . В нём находятся строки в точности как в оригинале. Это влияет на спец-символы, например в strings символ n – это перевод строки, а в strings.raw – это именно два символа n .
  • Дальнейший список аргументов функции шаблонизации – это значения выражений в $ <. >, в данном случае их три.

В отличие от strings , в strings.raw содержатся участки строки в «изначально введённом» виде.

То есть, если в строке находится n или u1234 или другое особое сочетание символов, то оно таким и останется.

Это нужно в тех случаях, когда функция шаблонизации хочет произвести обработку полностью самостоятельно (свои спец. символы?). Или же когда обработка спец. символов не нужна – например, строка содержит «обычный текст», набранный непрограммистом без учёта спец. символов.

Как видно, функция имеет доступ ко всему: к выражениям, к участкам текста и даже, через strings.raw – к оригинально введённому тексту без учёта стандартных спец. символов.

Функция шаблонизации может как-то преобразовать строку и вернуть новый результат.

В простейшем случае можно просто «склеить» полученные фрагменты в строку:

Функция str в примере выше делает то же самое, что обычные обратные кавычки. Но, конечно, можно пойти намного дальше. Например, генерировать из HTML-строки DOM-узлы (функции шаблонизации не обязательно возвращать именно строку).

Или можно реализовать интернационализацию. В примере ниже функция i18n осуществляет перевод строки.

Она подбирает по строке вида «Hello, $!» шаблон перевода «Привет, <0>!» (где <0>– место для вставки параметра) и возвращает переведённый результат со вставленным именем name :

Итоговое использование выглядит довольно красиво, не правда ли?

Разумеется, эту функцию можно улучшить и расширить. Функция шаблонизации – это своего рода «стандартный синтаксический сахар» для упрощения форматирования и парсинга строк.

Улучшена поддержка юникода

Внутренняя кодировка строк в JavaScript – это UTF-16, то есть под каждый символ отводится ровно два байта.

Но под всевозможные символы всех языков мира 2 байт не хватает. Поэтому бывает так, что одному символу языка соответствует два юникодных символа (итого 4 байта). Такое сочетание называют «суррогатной парой».

Самый частый пример суррогатной пары, который можно встретить в литературе – это китайские иероглифы.

Заметим, однако, что не всякий китайский иероглиф – суррогатная пара. Существенная часть «основного» юникод-диапазона как раз отдана под китайский язык, поэтому некоторые иероглифы – которые в неё «влезли» – представляются одним юникод-символом, а те, которые не поместились (реже используемые) – двумя.

В тексте выше для первого иероглифа есть отдельный юникод-символ, и поэтому длина строки 1 , а для второго используется суррогатная пара. Соответственно, длина – 2 .

Китайскими иероглифами суррогатные пары, естественно, не ограничиваются.

Ими представлены редкие математические символы, а также некоторые символы для эмоций, к примеру:

В современный JavaScript добавлены методы String.fromCodePoint и str.codePointAt – аналоги String.fromCharCode и str.charCodeAt , корректно работающие с суррогатными парами.

Например, charCodeAt считает суррогатную пару двумя разными символами и возвращает код каждой:

…В то время как codePointAt возвращает его Unicode-код суррогатной пары правильно:

Метод String.fromCodePoint(code) корректно создаёт строку из «длинного кода», в отличие от старого String.fromCharCode(code) .

Более старый метод fromCharCode в последней строке дал неверный результат, так как он берёт только первые два байта от числа 119987 и создаёт символ из них, а остальные отбрасывает.

Есть и ещё синтаксическое улучшение для больших Unicode-кодов.

В JavaScript-строках давно можно вставлять символы по Unicode-коду, вот так:

Синтаксис: uNNNN , где NNNN – четырёхзначный шестнадцатиричный код, причём он должен быть ровно четырёхзначным.

«Лишние» цифры уже не войдут в код, например:

Чтобы вводить более длинные коды символов, добавили запись u , где NNNNNNNN – максимально восьмизначный (но можно и меньше цифр) код.

Unicode-нормализация

Во многих языках есть символы, которые получаются как сочетание основного символа и какого-то значка над ним или под ним.

Например, на основе обычного символа a существуют символы: àáâäãåā . Самые часто встречающиеся подобные сочетания имеют отдельный юникодный код. Но отнюдь не все.

Для генерации произвольных сочетаний используются несколько юникодных символов: основа и один или несколько значков.

Например, если после символа S идёт символ «точка сверху» (код u0307 ), то показано это будет как «S с точкой сверху» Ṡ .

Если нужен ещё значок над той же буквой (или под ней) – без проблем. Просто добавляем соответствующий символ.

К примеру, если добавить символ «точка снизу» (код u0323 ), то будет «S с двумя точками сверху и снизу» Ṩ .

Пример этого символа в JavaScript-строке:

Такая возможность добавить произвольной букве нужные значки, с одной стороны, необходима, а с другой стороны – возникает проблемка: можно представить одинаковый с точки зрения визуального отображения и интерпретации символ – разными сочетаниями Unicode-кодов.

В первой строке после основы S идёт сначала значок «верхняя точка», а потом – нижняя, во второй – наоборот. По кодам строки не равны друг другу. Но символ задают один и тот же.

С целью разрешить эту ситуацию, существует юникодная нормализация, при которой строки приводятся к единому, «нормальному», виду.

В современном JavaScript это делает метод str.normalize().

Забавно, что в данной конкретной ситуации normalize() приведёт последовательность из трёх символов к одному: u1e68 (S с двумя точками).

Это, конечно, не всегда так, просто в данном случае оказалось, что именно такой символ в юникоде уже есть. Если добавить значков, то нормализация уже даст несколько символов.

Для большинства практических задач информации, данной выше, должно быть вполне достаточно, но если хочется более подробно ознакомиться с вариантами и правилами нормализации – они описаны в приложении к стандарту юникод Unicode Normalization Forms.

Полезные методы

Добавлен ряд полезных методов общего назначения:

  • str.includes(s) – проверяет, включает ли одна строка в себя другую, возвращает true/false .
  • str.endsWith(s) – возвращает true , если строка str заканчивается подстрокой s .
  • str.startsWith(s) – возвращает true , если строка str начинается со строки s .
  • str.repeat(times) – повторяет строку str times раз.

Конечно, всё это можно было сделать при помощи других встроенных методов, но новые методы более удобны.

Итого

  • Строки-шаблоны – для удобного задания строк (многострочных, с переменными), плюс возможность использовать функцию шаблонизации для самостоятельного форматирования.
  • Юникод – улучшена работа с суррогатными парами.
  • Полезные методы для проверок вхождения одной строки в другую.

Как я могу выполнить интерполяцию строк в JavaScript?

356 Tom Lehman [2009-09-11 02:40:00]

Рассмотрим этот код:

Есть ли другие способы вставки значения переменной в строку, кроме конкатенации строк?

javascript string string-interpolation

16 ответов

244 Решение Damjan Pavlica [2016-03-14 12:52:00]

Начиная с ES6, вы можете использовать литералы шаблона:

PS Обратите внимание на использование кавычек: » .

Используйте литералы строк шаблона ECMAScript 2015, если применимо.

Описание

Нет прямого способа сделать это в соответствии со спецификациями ECMAScript 5, но ECMAScript 6 имеет строки шаблона, которые также были известны как квазилитералов при составлении спецификации. Используйте их следующим образом:

Вы можете использовать любое допустимое выражение JavaScript внутри <> . Например:

Другое важное: вам больше не нужно беспокоиться о многострочных строках. Вы можете написать их просто как

Примечание. Я использовал io.js v2.4.0 для оценки всех строк шаблонов, показанных выше. Вы также можете использовать последнюю версию Chrome для тестирования приведенных выше примеров.

Примечание. Спецификации ES6 теперь завершены, но еще не реализованы всеми основными браузерами.
Согласно страницам сети разработчиков Mozilla, это будет реализовано для базовой поддержки, начиная с следующих версий: Firefox 34, Chrome 41, Internet Explorer 12. Если вы являетесь пользователем Opera, Safari или Internet Explorer, и теперь вам интересно, этот тестовый стенд можно использовать, пока все не получат поддержку для этого.

Дуглас Крокфорд Исправленный JavaScript включает функцию String.prototype.supplant . Он короткий, знакомый и простой в использовании:

Если вы не хотите изменять прототип String, вы всегда можете адаптировать его к автономному, или поместить его в другое пространство имен или что-то еще.

Осторожно: избегайте использования любой системы шаблонов, которая не позволит вам избежать собственных разделителей. Например, Невозможно вывести следующее, используя метод supplant() , упомянутый здесь.

«Мне 3 года благодаря моей переменной» возраст «.

Простая интерполяция может работать для небольших автономных скриптов, но часто приходит с этим недостатком дизайна, который ограничит любое серьезное использование. Я честно предпочитаю шаблоны DOM, например:

И используйте манипуляции jQuery: $(‘#age’).text(3)

В качестве альтернативы, если вы просто устали от конкатенации строк, всегда есть альтернативный синтаксис:

21 NawaMan [2009-09-11 02:49:00]

20 shuckster [2009-09-11 02:48:00]

Вы можете использовать Prototype template system, если вам действительно нравится использовать кувалду для взлома гайки:

Я использую этот шаблон на многих языках, когда я еще не знаю, как это сделать правильно, и просто хочу быстро изложить идею:

Хотя это не особенно эффективно, я нахожу это читабельным. Это всегда работает и всегда доступно:

ВСЕГДА

Вы легко можете использовать ES6 template string и перевести на ES5 с помощью любого доступного трансляционного, такого как babel.

6 zsong [2013-02-16 00:19:00]

Попробуйте kiwi, легкий модуль JavaScript для строковой интерполяции.

Вы можете сделать

Вот решение, которое требует, чтобы вы предоставили объект со значениями. Если вы не предоставляете объект в качестве параметра, он будет использовать глобальные переменные по умолчанию. Но лучше придерживаться использования параметра, он намного чище.

5 Hardik [2017-08-29 13:57:00]

используйте ‘ (серьезные акценты, также известные как backtick) вместо одинарных кавычек ( ‘ ) или двойных кавычек ( » ) и знака доллара/скобки $

Узнайте больше о шаблонных литералах здесь.

4 [2015-07-26 12:25:00]

Если вы хотите интерполировать в вывод console.log , то просто

Здесь %s — это так называемый «спецификатор формата». console.log имеет встроенную встроенную поддержку интерполяции.

3 Jo Liss [2011-02-12 05:54:00]

Другой кувалдой: jquery-tmpl (шаблонизация с помощью jQuery).

2 James Ko [2016-01-01 19:06:00]

Развернувшись на втором ответе Грега Кинделя, вы можете написать функцию, чтобы исключить часть шаблона:

Я могу показать вам пример:

Использование синтаксиса шаблона не работает в старых браузерах, что важно, если вы создаете HTML для публичного использования. Использование конкатенации является утомительным и трудным для чтения, особенно если у вас много или длинные выражения или если вы должны использовать скобки для обработки сочетаний чисел и строковых элементов (оба из которых используют оператор +).

PHP расширяет строки в кавычках, содержащие переменные и даже некоторые выражения, используя очень компактную запись: $a=»the color is $color»;

В JavaScript эффективная функция может быть написана для поддержки этого: var a=S(‘the color is ‘,color); , используя переменное количество аргументов. Хотя в этом примере нет преимущества перед конкатенацией, когда выражения становятся длиннее, этот синтаксис может быть более понятным. Или можно использовать знак доллара, чтобы обозначить начало выражения с помощью функции JavaScript, как в PHP.

С другой стороны, написание эффективной обходной функции, обеспечивающей шаблонное расширение строк для старых браузеров, не составило бы труда. Возможно, кто-то уже сделал это.

Наконец, я представляю, что sprintf (как в C, C++ и PHP) может быть написан на JavaScript, хотя он будет немного менее эффективным, чем эти другие решения.

Строка интерполяции — String interpolation

В компьютерном программировании , интерполяции строк (или переменной интерполяции , подстановки переменных или расширения переменной ) является процесс оценки в строку буквальным , содержащую один или несколько заполнителей , получая результат , в котором заполнители заменяются их соответствующими значениями. Это является одной из форм простой обработки шаблона , или, в формальной точки зрения, форма квази-цитаты (или логической заместительной интерпретации). Строка интерполяция позволяет проще и понятнее форматирование строк и контент спецификация по сравнению со строкойконкатенации .

Строка интерполяция является обычным явлением во многих языках программирования , которые делают интенсивное использование строковых представлений данных, такие как Apache Groovy , Котлин , Perl , PHP , Python , Ruby , , Scala , Swift , Tcl и большинство Unix — оболочки . Два режима буквального выражения, как правило , предлагается: одна с интерполяцией включена, другой без (называется сырой строка ). Заполнителей обычно представлены голым или именованная сигила (обычно $ или % ), например , $placeholder или %123 . Расширение строки обычно происходит в период выполнения .

содержание

вариации

Некоторые языки не предлагают интерполяцию строки, вместо этого предлагает стандартную функцию , где один параметр является строкой формата Printf , а другой (другие) обеспечивают значения для каждого заполнителя.

Рубин использует # символ для интерполяции, и позволяет интерполирование любого выражения, а не только переменные. Другие языки могут поддерживать более продвинутые интерполяции с помощью специальной функции форматирования, такие как printf , в котором первый аргумент, то формат , определяет шаблон , в котором замещены остальные аргументы.

Алгоритмы

Есть два основных типа расширения переменных алгоритмов для переменной интерполяции :

  1. Заменить и расширить заполнители : создание новой строки из исходного пути найти замены операций. Найти переменную-ссылку (заполнитель), заменить его по переменной величине. Этот алгоритм не предлагает никакой стратегии кэширования.
  2. Сплит и присоединиться строка : разделяя строку в массив, и слиянии его с соответствующим набором значений; затем присоединиться к детали конкатенации. Раскол строка может быть кэшируются для повторного использования.

Проблемы с безопасностью

Строка интерполяция, как конкатенации, может привести к проблемам безопасности. Если введенные пользователем данные неправильно убежали или фильтруются, система будет подвергаться воздействию SQL инъекции , инъекции сценария , XML External Entity Injection (XXE) и межсайтовый скриптинг (XSS) атак.

Пример инъекции SQL:

Если $id заменяется « » ‘; DELETE FROM Table ; SELECT * FROM Table WHERE id = ‘ , выполнение этого запроса будет уничтожить все данные в таблице.

Примеры

Следующий Perl код работает одинаково в PHP :

производит вывод: Alice said Hello World to the crowd of people.

Java String: работа со строками в Java

Работа со строками в Java очень проста(Используется класс class java.lang.String). Главное, на что следует обратить внимание, это то, что работа со строками с помощью оператора «+» не очень эффективна; она создает новые строковые объекты без необходимости.

Для большинства программ это не имеет значения; но если вы выполняете много операций со строками и скорость не на последнем месте, используйте StringBuffer (потокобезопасный) или StringBuilder (не потокобезопасный, но немного более эффективный).

Также имейте в виду, что Java не самый эффективный язык в мире для работы с большим количеством текстовых данных. Perl или Python обычно работают намного быстрее.

И, наконец, не забудьте использовать метод equals() для сравнения текста в строках, а не == (что сравнивает объекты, а не текст).

Объявление и инициализация строк в Java

Вы можете объявить и инициализировать строку в Java, используя класс String.

Присоединение, объединение или добавление строк в Java

Самый простой способ объединить строки в Java — это использовать +. Это работает так:

Однако это не очень эффективно, потому что каждый раз, когда вы пишете +, вы создаете новый объект String. По этой причине вы можете использовать StringBuilder или более старую поточно-ориентированную версию StringBuffer.

Более того, поскольку append() возвращает ссылку на сам объект StringBuilder, мы можем написать что-то вроде этого с тем же эффектом:

Подстрока Java: выбор частей строк

Чтобы получить часть строки, используйте метод substring.

String substring(int beginIndex, int endIndex)

EndIndex здесь не является обязательным; если его убрать, вы получите всю строку после beginIndex. Обратите внимание, что выбранная подстрока не включает символ в самом endIndex. Она включает в себя все символы до endIndex.

Длина выбранной подстроки равна endIndex — startIndex.

Вот несколько примеров.

quick brown fox
The

Java Array String: объединение массивов строк

Удивительно, но в ядре Java нет способа объединения массивов строк, хотя такие методы существуют в различных библиотеках.

Вы всегда можете создать свои собственные. Следующий класс объявляет именно такой метод и использует его для соединения массива строк. Вы можете легко адаптировать это для работы с ArrayList или Vector или чем-то еще.

Java String Split: разделение строк

Вы можете разбить строку на массив токенов, используя метод split (REGEX).

Давайте посмотрим на некоторые примеры.

Чтобы разделить пробелом (это также работает для вкладок):

The
quick
brown
fox
Разделим электронный адрес на части

someone
nowhere
com

Нахождение длины строки

java string length() возвращает общее количество символов в строке. Длина строки Java такая же, как в коде Unicode.

string length is: 10
string length is: 6

Еще один способ:

String is not empty and length is: 10
String is empty now: 0

Сравнение строк Java

Для сравнения строк в Java используйте equals(), а не ==.

== сообщит вам, если две ссылки ссылаются на один и тот же объект. Чтобы проверить, идентичны ли две строки, .equals делает то, что вы хотите.

Следующая программа иллюстрирует это:

text1 matches text2.
text1 and text2 are the same object (oddly)
text2 and text3 are the same object.

Чтобы проверить, является ли объект строкой или нет, используйте instanceof.

Форматирование строк или преобразование чисел в строки

Если вы просто хотите преобразовать число в строку в Java, это очень просто с помощью toString (). Возможно, вам придется сначала использовать примитивный тип, например, int, для объекта типа Integer или Double.

59
57.59
Если вы хотите больше контроля над форматированием ваших чисел, вам нужен метод static format ().

Этот метод работает так же, как sprintf в C или Perl. Вот пример, который форматирует различные числа:

Count: 59, Cost: $057.59

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Читать еще:  Java sql таблица
Ссылка на основную публикацию
Adblock
detector