Java-эквиваленты C # String.Format () и String.Join ()

Я знаю, что это немного вопрос новичков, но есть ли эквиваленты строковых операций C # в Java?

В частности, я говорю о String.Format и String.Join .

16 Solutions collect form web for “Java-эквиваленты C # String.Format () и String.Join ()”

Объект String Java имеет метод format (с 1,5), но не метод join .

Чтобы получить кучу полезных методов String, которые уже не были включены, вы можете использовать org.apache.commons.lang.StringUtils .

String.format . Что касается присоединения, вам нужно написать свой собственный:

  static String join(Collection< ?> s, String delimiter) { StringBuilder builder = new StringBuilder(); Iterator< ?> iter = s.iterator(); while (iter.hasNext()) { builder.append(iter.next()); if (!iter.hasNext()) { break; } builder.append(delimiter); } return builder.toString(); } 

Вышеизложенное происходит из http://snippets.dzone.com/posts/show/91

Гуава поставляется с classом « Joiner » .

 import com.google.common.base.Joiner; Joiner.on(separator).join(data); 

Начиная с Java 8, join() теперь доступен в виде двух методов classа в classе String. В обоих случаях первым аргументом является разделитель.

Вы можете передать отдельные CharSequence s в качестве дополнительных аргументов :

 String joined = String.join(", ", "Antimony", "Arsenic", "Aluminum", "Selenium"); // "Antimony, Arsenic, Alumninum, Selenium" 

Или вы можете передать Iterable< ? extends CharSequence> Iterable< ? extends CharSequence> :

 List strings = new LinkedList(); strings.add("EX"); strings.add("TER"); strings.add("MIN"); strings.add("ATE"); String joined = String.join("-", strings); // "EX-TER-MIN-ATE" 

Java 8 также добавляет новый class StringJoiner , который вы можете использовать следующим образом:

 StringJoiner joiner = new StringJoiner("&"); joiner.add("x=9"); joiner.add("y=5667.7"); joiner.add("z=-33.0"); String joined = joiner.toString(); // "x=9&y=5667.7&z=-33.0" 

TextUtils.join доступен на Android

Вы также можете использовать переменные аргументы для строк следующим образом:

  String join (String delim, String ... data) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.length; i++) { sb.append(data[i]); if (i >= data.length-1) {break;} sb.append(delim); } return sb.toString(); } 

Что касается объединения, я считаю, что это может выглядеть немного менее сложно:

 public String join (Collection c) { StringBuilder sb=new StringBuilder(); for(String s: c) sb.append(s); return sb.toString(); } 

Я не могу использовать синтаксис Java 5 столько, сколько захочу (верьте или нет, я использую 1.0.x в последнее время), поэтому я, возможно, немного ржавый, но я уверен, что концепция правильная ,

edit add: добавление String может быть медленным, но если вы работаете с графическим интерфейсом или какой-то кратковременной рутиной, то действительно не имеет значения, возьмете ли вы 0,500 секунд или 0,006, так что если бы у вас была коллекция под названием «joinMe», что вы хотите добавить к существующей строке «target», было бы ужасно просто вставить это:

 for(String s : joinMe) target += s; 

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

Что еще более важно, его легко запомнить, короткое, быстрое и очень читаемое. Производительность не всегда является автоматическим победителем в выборе дизайна.

Вот довольно простой ответ. Используйте += поскольку это меньше кода и пусть оптимизатор преобразует его в StringBuilder для вас. Используя этот метод, вам не нужно делать какие-либо «последние» проверки в вашем цикле (повышение производительности), и вам не нужно беспокоиться о том, чтобы удалить все разделители в конце.

  Iterator iter = args.iterator(); output += iter.hasNext() ? iter.next() : ""; while (iter.hasNext()) { output += "," + iter.next(); } 

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

  public String join(String delim, List destinations) { StringBuilder sb = new StringBuilder(); int delimLength = delim.length(); for (String s: destinations) { sb.append(s); sb.append(delim); } // we have appended the delimiter to the end // in the previous for-loop. Let's now remove it. if (sb.length() >= delimLength) { return sb.substring(0, sb.length() - delimLength); } else { return sb.toString(); } } 

Если вы хотите объединить (объединить) несколько строк в один, вы должны использовать StringBuilder. Это намного лучше, чем использование

 for(String s : joinMe) target += s; 

Существует также небольшая победа над StringBuffer, поскольку StringBuilder не использует синхронизацию.

Для универсального метода полезности, подобного этому, он будет (в конечном счете) вызываться много раз во многих ситуациях, поэтому вы должны сделать его эффективным и не выделять много преходящих объектов. Мы профилировали множество, много разных приложений Java и почти всегда находим, что конкатенация строк и распределение строк / символов char [] занимают значительное количество времени / памяти.

Наш метод многократной коллекции -> string сначала вычисляет размер требуемого результата, а затем создает StringBuilder с этим начальным размером; это позволяет избежать ненужного дублирования / копирования внутреннего символа [], используемого при добавлении строк.

Я написал собственный:

 public static String join(Collection col, String delim) { StringBuilder sb = new StringBuilder(); Iterator iter = col.iterator(); if (iter.hasNext()) sb.append(iter.next().toString()); while (iter.hasNext()) { sb.append(delim); sb.append(iter.next().toString()); } return sb.toString(); } 

но Collection не поддерживается JSP, поэтому для функции tag я написал:

 public static String join(List< ?> list, String delim) { int len = list.size(); if (len == 0) return ""; StringBuilder sb = new StringBuilder(list.get(0).toString()); for (int i = 1; i < len; i++) { sb.append(delim); sb.append(list.get(i).toString()); } return sb.toString(); } 

и поместите в .tld файл:

 < ?xml version="1.0" encoding="UTF-8"?>  join com.core.util.ReportUtil java.lang.String join(java.util.List, java.lang.String)   к < ?xml version="1.0" encoding="UTF-8"?>  join com.core.util.ReportUtil java.lang.String join(java.util.List, java.lang.String)   

и использовать его в JSP-файлах как:

 < %@taglib prefix="funnyFmt" uri="tag:com.core.util,2013:funnyFmt"%> ${funnyFmt:join(books, ", ")} 

StringUtils – довольно полезный class в библиотеке Apache Commons Lang.

Существует MessageFormat.format() который работает как C # String.Format() .

Я вижу много чрезмерно сложных реализаций String.Join здесь. Если у вас нет Java 1.8, и вы не хотите импортировать новую библиотеку, то реализация ниже должна быть достаточной.

 public String join(Collection col, String delim) { StringBuilder sb = new StringBuilder(); for ( String s : col ) { if ( sb.length() != 0 ) sb.append(delim); sb.append(s); } return sb.toString(); } 
 ArrayList j=new ArrayList<>; j.add(1); j.add(.92); j.add(3); String ntop=j.toString(); //ntop= "[1, 0.92, 3]" 

Таким образом, String ntop сохраняет значение всей коллекции с помощью разделителей и скобок запятой.

Я бы просто использовал оператор конкатенации строк «+» для объединения двух строк. s1 += s2;

  • В чем разница между строковой константой и строковым литералом?
  • Как проверить, содержит ли строка подстроку в Bash
  • Как я могу конкатенировать несколько необязательных строк в swift 3.0?
  • Поиск всех позиций подстроки в большей строке в C #
  • Как разбить строку на Java
  • Как проверить, что строка обрабатывается двойным?
  • Простой способ удалить несколько пробелов в строке?
  • Каков тип строковых литералов в C и C ++?
  • Как найти числа из строки?
  • Удаление дубликатов из строки в Java
  • Как разбить строку на строки и включить разделители с помощью .NET?
  • Interesting Posts

    iOS – Отключение клавиатуры при касании вне UITextField

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

    Как избавиться от `устаревшего преобразования из строковой константы в ‘char *’ ‘предупреждения в GCC?

    Эмулировать прокрутку колеса мыши с помощью клавиатуры

    Как предоставить учетные данные для прокси-аутентификации в Windows 7 или Firefox 3.6?

    Полная очистка жесткого диска – измельчение, вытирание или дд?

    Как определить, когда приложение Android работает в эмуляторе?

    Восстановить данные жесткого диска

    cmake и libpthread

    Событие Click на элементе выбора опции в хроме

    Почему моя микроволновая печь убивает Wi-Fi?

    Сложные запросы wmi с использованием execquery

    Показывать дату в системном трее в Windows 10

    Как управлять оснасткой Windows 7 с двумя мониторами?

    Как сделать задержку в Java?

    Давайте будем гением компьютера.