- How to convert byte[] array to String in Java
- 1. Convert byte[] to String (text data)
- 2. Convert byte[] to String (binary data)
- Download Source Code
- References
- Comments
- Byte to String conversion in Java – 5 ways
- Various ways to convert Byte to String
- Way 1: Using Byte.toString(byteVal); method
- Way 2: Using String.valueOf(byteVal); method
- Way 3: create Byte object and then convert to String using toString() method Here, we will create new Byte object with primitive byte value as constructor-argument After creating new Byte object by passing primitive byte value, then invoke toString() method for converting primitive byte data-type to String object Method signature: ConvertByteToStringUsingObjectCreation.java Output: Way 4: adding double quotes (“”) to byte value Note: for this conversion to work, double-quotes (“”) must be added at the start of the concatenation Syntax: ConvertByteToStringByAddingDoubleQuotes.java Output: Way 5: Using append() method of StringBuffer & StringBuilder This method can be used to convert primitive byte data-type to String object by appending to StringBuffer or StringBuilder object And then invoking toString() method Syntax: ConvertByteToStringByAppending.java Output: Auto-boxing of Byte wrapper-type to primitive byte data-type and vice-versa Auto-boxing feature available from Java 1.5 version So, converting primitive data-type to wrapper-type can easily be done, by directly assigning Let’s see one example based on this auto-boxing feature AutoBoxingFeatureForByteConversion.java Output: Hope, you found this article very helpful. If you have any suggestion or want to contribute any other way or tricky situation you faced during Interview hours, then share with us. We will include that code here. Источник 2 примера для преобразования массива Byte [] в строку в Java Преобразование байтового массива в String кажется простым, но трудно сделать это правильно. Многие программисты делают ошибку, игнорируя кодировку символов всякий раз, когда байты преобразуются в String или char или наоборот. Как программист, мы все знаем, что компьютер понимает только двоичные данные, то есть 0 и 1. Все, что мы видим и используем, например изображения, текстовые файлы, фильмы или любые другие мультимедийные файлы, хранится в виде байтов, но что более важно это процесс кодирования или декодирования байтов в символ. Преобразование данных является важной темой на любом собеседовании по программированию, и из-за хитрости кодирования символов эти вопросы являются одним из самых популярных вопросов о интервью в формате String в интервью Java. При чтении строки из входного источника, например, файлов XML, HTTP-запроса, сетевого порта или базы данных, вы должны обратить внимание на то, какую кодировку символов (например, UTF-8, UTF-16 и ISO 8859-1) они кодируют. Если вы не будете использовать ту же кодировку символов при преобразовании байтов в строку , вы получите поврежденную строку, которая может содержать совершенно неправильные значения. Вы могли видеть ?, квадратные скобки после преобразования byte [] в String, это из-за значений, которые ваша текущая кодировка символов не поддерживает, и просто показывает некоторые значения мусора. Я пытался понять, почему программы делают ошибки кодирования символов чаще, чем нет, и мои небольшие исследования и собственный опыт позволяют предположить, что это может быть вызвано двумя причинами: во-первых, недостаточно для интернационализации и кодировки символов, а во-вторых, потому что символы ASCII поддерживаются почти все популярные схемы кодирования и имеют одинаковые значения. Поскольку мы в основном имеем дело с кодировкой, такой как UTF-8, Cp1252 и Windows-1252, которая отображает символы ASCII (в основном алфавиты и цифры) без сбоев, даже если вы используете другую схему кодирования. Настоящая проблема возникает, когда ваш текст содержит специальные символы, например «é» , который часто используется во французских именах. Если кодировка символов вашей платформы не распознает этот символ, то либо вы увидите другой символ, либо что-то в этом роде, и, к сожалению, пока вы не обожгете руки, вы вряд ли будете осторожны с кодировкой символов. В Java все немного сложнее, потому что многие классы ввода-вывода, например InputStreamReader, по умолчанию используют кодировку символов платформы. Это означает, что если вы запустите свою программу на другом компьютере, вы, скорее всего, получите другой вывод из-за разного кодирования символов, используемого на этом компьютере. В этой статье мы узнаем, как преобразовать byte [] в String в Java как с помощью JDK API, так и с помощью общих утилит Guava и Apache. Как преобразовать byte [] в строку в Java Есть несколько способов изменить байтовый массив на String в Java, вы можете использовать методы из JDK или использовать бесплатные API с открытым исходным кодом, такие как Apache commons и Google Guava. Этот API предоставляет как минимум два набора методов для создания байтового массива формы String; один, который использует кодировку платформы по умолчанию, а другой — кодировку символов. Вы всегда должны использовать позже, не полагайтесь на кодировку платформы. Я знаю, что это может быть то же самое, или вы, возможно, не сталкивались с какими-либо проблемами, но лучше быть в безопасности, чем потом сожалеть. Как я указывал в своем последнем посте о печати байтового массива в виде шестнадцатеричной строки , это также один из лучших способов указания кодировки символов при преобразовании байтов в символы на любом языке программирования. Возможно, ваш байтовый массив содержит непечатаемые символы ASCII. Давайте сначала посмотрим, как JDK преобразует byte [] в String: Вы можете использовать конструктор String, который принимает байтовый массив и кодировку символов: Это правильный способ преобразования байтов в строку, если вы точно знаете, что байты кодируются в кодировке символов, которую вы используете. Если вы читаете байтовый массив из любого текстового файла, например, XML-документа, HTML-файла или двоичного файла, вы можете использовать библиотеку Apache Commons IO для непосредственного преобразования FileInputStream в строку. Этот метод также буферизует входные данные для внутреннего использования, поэтому нет необходимости использовать другой BufferedInputStream . Чтобы правильно преобразовать этот байтовый массив в строку, вы должны сначала обнаружить правильную кодировку символов, прочитав метаданные, например Content-Type, и т. Д., В зависимости от формата / протокола данных, которые вы читаете. , Это одна из причин, по которой я рекомендую использовать парсеры XML, например парсеры SAX или DOM, для чтения XML-файлов, они сами занимаются кодированием символов. Некоторые программисты также рекомендуют использовать Charset over String для определения кодировки символов, например, вместо «UTF-8» используйте StandardCharsets.UTF_8, главным образом, чтобы избежать исключения UnsupportedEncodingException в худшем случае. Существует шесть стандартных реализаций Charset, которые гарантированно поддерживаются всеми реализациями платформы Java. Вы можете использовать их вместо указания схемы кодирования в String. Короче говоря, всегда предпочитайте StandardCharsets.ISO_8859_1 вместо «ISO_8859_1», как показано ниже: Другие стандартные кодировки, поддерживаемые платформой Java: StandardCharsets.ISO_8859_1 StandardCharsets.US_ASCII StandardCharsets.UTF_16 StandardCharsets.UTF_16BE StandardCharsets.UTF_16LE Если вы читаете байты из входного потока, вы также можете проверить мой предыдущий пост о 5 способах преобразования InputStream в String в Java для получения подробной информации. Источник Byte to string android studio Иногда возникают ситуации, когда имея величину какого-либо определенного типа, необходимо присвоить ее переменной другого типа. С переменными и их типами мы познакомились в прошлом уроке, в этом уроке мы рассмотрим наиболее популярные преобразования типов в Java: Java преобразование строки в число (STRING to NUMBER) В следующих примерах будет использована конструкция try-catch. Это необходимо для обработки ошибки, в случае, если строка содержит иные символы кроме чисел или число, выходящее за рамки диапазона допустимых значений определенного типа. Например, строка «somenumber» не может быть переведена в тип int или в любой другой числовой тип. В это случае, при компеляции возникнет ошибка. Чтобы этого избежать, следует обезопаситься с помощью конструкции try-catch. String to byte C использованием конструктора С использованием метода valueOf класса Byte С использованием метода parseByte класса Byte Перевод строки в массив байтов и обратно из массива байтов в строку String to short C использованием конструктора C использованием метода valueOf класса Short C использованием метода parseShort класса Short String to int C использованием конструктора C использованием метода valueOf класса Integer C использованием метода parseInt класса Integer String to long C использованием конструктора C использованием метода valueOf класса Long C использованием метода parseLong класса Long String to float С использованием конструктора C использованием метода valueOf класса Float C использованием метода parseFloat класса Float String to double С использованием конструктора C использованием метода valueOf класса Double C использованием метода parseDouble класса Double String to boolean Преобразование строки в логический тип 2мя способами. Обратите внимание, что строка не соответствующая true, будет преобразована в логическое значение false. Источник Класс String Класс String очень часто используется программистами, поэтому его следует изучить очень хорошо. Следует помнить, что объекты класса String являются неизменяемыми (immutable). Поэтому, когда вам кажется, что вы меняете строку, то на самом деле вы создаёте новую строку. В Java есть специальные классы StringBuffer и StringBuilder, который допускают изменения в строке. Классы String, StringBuffer, StringBuilder определены в пакете java.lang и доступны автоматически без объявления импорта. Все три класса реализуют интерфейс CharSequence. Создать строку очень просто. Например, можно так: Можно создать массив строк: Можно создать пустой объект класса String: Можно создать строку через массив символов: Есть ещё конструктор, позволяющий задать диапазон символьного массива. Вам нужно указать начало диапазона и количество символов для использования: Можно создать объект класса String из объекта классов StringBuffer и StringBuilder при помощи следующих конструкторов: Операторы + и += для String На языке Java знак плюс (+) означает конкатенацию строк (concatenation), иными словами — объединение строк. Если один из операндов в выражении содержит строку, то другие операнды также должны быть строками. Поэтому Java сама может привести переменные к строковому представлению, даже если они не являются строками. За кулисами Java за нас преобразовало число 4 в строку «4». Форматирование строк Предположим у нас есть строковый ресурс: Чтобы вывести эту строку программно в элементе TextView, можно использовать код: Представьте себе, что у вас несколько котов. Можно, конечно, завести для каждого кота свою строку. Но ведь строки очень похожи, меняются только имена и возраст. Также можно менять число лап и хвостов (что вы курите?). В таких случаях можно применить форматирование строк. Нужно определить слова, которые мы будем менять и заменить их на специальный набор символов, которые начинаются с символа процента, затем идет число, увеличивающееся на единицу, далее $s для строк или $d для чисел. Итак, изменим наш строковой ресурс так: Внесём изменения в код: Если вас есть кот Васька и ему шесть лет, то добавляем две переменные и форматируем строку Здесь показан простейший пример с форматированием. Помните о нём и применяйте в нужных местах. Строковой ресурс Строки желательно хранить в ресурсах (о ресурсах есть отдельная статья). Программно доступ к строковому ресурсу делается так: Извлечь строки из строковых массивов в ресурсах Предположим, у вас есть строковый массив, определённый в файле strings.xml под именем cats_array. Тогда получить доступ к строкам из ресурсов можно так: Методы public char charAt (int index) Возвращает символ с указанным смещением в этой строке. Отсчёт идёт от 0. Не надо использовать отрицательные и несуществующие значения, будьте серьёзнее. Для извлечения нескольких символов используйте getChars(). public int codePointAt(int index) Возвращает Unicode-символ в заданном индексе public int codePointBefore(int index) Возвращает Unicode-символ, который предшествует данному индексу public int codePointCount(int start, int end) Вычисляет количество Unicode-символов между позициями start и end public int compareTo(String string) Сравнивает указанную строку, используя значения символов Unicode и вычисляет, какая из строк меньше, равна или больше следующей. Может использоваться при сортировке. Регистр учитывается. Если строки совпадают, то возвращается 0, если меньше нуля, то вызывающая строка меньше строки string, если больше нуля, то вызывающая строка больше строки string. Слова с большим регистром стоят выше слова с нижним регистром. Отсортируем массив строк через пузырьковую сортировку. В результате мы получим: Как видите, от перемены мест слагаемых сумма сортировки коты не меняются. public int compareToIgnoreCase (String string) Сравнивает указанную строку, используя значения символов Unicode, без учёта регистра. public String concat (String string) Объединяет строку с указанной строкой. Возвращается новая строка, которая содержит объединение двух строк. Обратите внимание, что само имя метода содержит кота! Метод выполняет ту же функцию, что и оператор + и можно было написать Сук + кот . Но настоящий кошатник будет использовать «кошачий» метод. public boolean contains (CharSequence cs) Определяет, содержит ли строка последовательность символов в CharSequence public boolean contentEquals(CharSequence cs) Сравнивает CharSequence с этой строкой. public boolean contentEquals(StringBuffer strbuf) Сравнивает StringBuffer с этой строкой public static String copyValueOf(char[] data) Создаёт новую строку, содержащую символы из указанного массива. Изменение массива после создания строки не изменяет созданную строку. public static String copyValueOf (char[] data, int start, int length) Создаёт новую строку, содержащую указанные символы из массива data начиная с позиции start (нумерация начинается с нуля) длинной length. Если указать индекс вне границ строки, то возникнет исключение StringIndexOutOfBoundsException. public boolean endsWith(String suffix) Проверяет, заканчивается ли строка символами suffix. public boolean equals (Object string) Сравнивает указанный объект и строку и возвращает true, если сравниваемые строки равны, т.е. содержит те же символы и в том же порядке с учётом регистра. Не путать метод с оператором ==, который сравнивает две ссылки на объекты и определяет, ссылаются ли они на один и тот же экземпляр. Смотри пункт Сравнение строк: equals() или ==? public boolean equalsIgnoreCase(String string) Сравнивает указанную строку с исходной строкой без учёта регистра и возвращает true, если они равны. Диапазон A-Z считается равным диапазону a-z. public static String format(Locale locale, String format, Object. args) Возвращает отформатированную строку, используя прилагаемый формат и аргументы, локализованных в данной области. Например дату или время Склеиваем два слова, которые выводятся с новой строки. При этом второе слово выводится в верхнем регистре. Конвертируем число в восьмеричную систему. По аналогии выводим в шестнадцатеричной системе Для верхнего регистра используйте %X, тогда вместо ff будет FF. Для десятичной системы используйте %d. Дату тоже можно выводить по разному. Допустим, при выводе double получается 3.0. Как вывести 3, т.е. без нуля. И с учётом того, что например 3.1 должно выводиться как 3.1. Округление здесь не поможет. public byte[] getBytes() Конвертируем строку в набор байтов. public byte[] getBytes(String charsetName) Возвращает отформатированную строку, используя прилагаемую кодировку. public void getBytes(int start, int end, byte[] data, int index) и другие перегруженные версии Метод сохраняет символы в массив байтов, альтернатива методу getChars(). Часто используется при экспорте строк из различных источников, где используются другие символы Unicode. Например, Java по умолчанию использует 16-битовые символы Unicode, а в интернете часто строки используют 8-битовый код Unicode, ASCII и др. public void getChars(int start, int end, char[] buffer, int index) Метод для извлечения нескольких символов из строки. Вам надо указать индекс начала подстроки (start), индекс символа, следующего за концом извлекаемой подстроки (end). Массив, который принимает выделенные символы находится в параметре buffer. Индекс в массиве, начиная с которого будет записываться подстрока, передаётся в параметре index. Следите, чтобы массив был достаточного размера, чтобы в нём поместились все символы указанной подстроки. public int hashCode() Возвращает целое число — хэш-код для данного объекта. public int indexOf(int ch) Ищет появление указанного символа и возвращает позицию индекса. Если символа нет, то возвращается -1. public int indexOf (int ch, int fromIndex) Ищет индекс символа сh, начиная с позиции fromIndex public int indexOf (String str) Ищет подстроку str и возвращает индекс найденной подстроки. Если подстроки не существует, то возвращается -1. public int indexOf (String str, int fromIndex) Ищет подстроку str, начиная с позиции fromIndex и возвращает индекс найденной подстроки. Если подстроки не существует, то возвращается -1. Смотри также схожий метод lastIndexOf(). public String intern () public boolean isEmpty () Проверяет, является ли строка пустой Данный метод появился в API 9 (Android 2.1). Для старых устройств используйте String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Метод ищет в строке в обратном порядке и возвращает индекс последнего появления указанного символа. Если указанный символ не найден, то возвратится -1. Например, получить имя файла без расширения можно так: public static String join (CharSequence delimiter, CharSequence. elements) Метод появился в API 26. Склеивает слова указанным разделителем. Если слово является null, то null будет использоваться в качестве слова. Есть перегруженная версия. В этом примере мы получаем позицию последней точки и получаем подстроку до неё. public int length() Возвращает длину строки public boolean matches(String regularExpression) Проверяет, соответствует ли строка регулярным выражениям. public int offsetByCodePoints (int index, int codePointOffset) Возвращает позицию, расположенную на расстоянии codePointOffset после начальной позиции, заданной параметром index public boolean regionMatches (int thisStart, String string, int start, int length) Метод сравнивает указанную часть строки с другой частью строки. Нужно задать индекс начала диапазон строки вызывающего объекта класса String. Строка для сравнивания передаётся в параметре string. Индекс символа, начиная с которого нужно выполнять сравнение передаётся в параметре start, а длина сравниваемой подстроки в параметре length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Перегруженная версия. Метод сравнивает указанную часть строки с другой частью строки, игнорируя регистр. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Меняет символ или последовательность символов target на replacement public String replaceAll (String regularExpression, String replacement) Смотри также пример в задачнике — Удаление гласных из строки. public String replaceFirst (String regularExpression, String replacement) Удаляет первые символы при помощи регулярного выражения. Например, если нужно удалить нули в начале чисел 001, 007, 000024, то можно использовать такой вызов. public String[] split (String regularExpression) и другие перегруженные версии Разбивает строку на массив из слов. Например, есть строка Васька Рыжик Мурзик Барсик и мы хотим получить массив имён котов: aCats[0] = Васька aCats[1] = Рыжик aCats[2] = Мурзик aCats[3] = Барсик Также можно использовать регулярное выражение \s+, чтобы учитывать любые типы пробелов, включая двойные и более пробелы подряд. Будьте аккуратны при разбиении по запятой. Часто после запятой идёт пробел, поэтому нужно правильно установить разделитель. Если исходная строка начинается с разделителя, первым элементом результирующего массива будет пустая строка. Но если исходная строка заканчивается разделителем, то пустой строки не будет. У перегруженной версии метода есть дополнительный параметр limit, определяющий, какое количество раз шаблон regex будет применяться к исходной строке. Также следует быть аккуратным с разделителем |. В регулярных выражениях | является специальным символом. Чтобы использовать вертикальную черту в качестве разделителя, нужно экранировать этот символ с помощью двух обратных слешей «\|». public boolean startsWith(String prefix) Проверяет, начинается ли строка символами prefix с начала строки public boolean startsWith(String prefix, int start) Проверяет, начинается ли заданная строка символами prefix с указанной позиции. public CharSequence subSequence (int start, int end) Аналогичен методу substring(), но может использоваться для CharSequence. public String substring(int start) и другие перегруженные версии Создаёт новую последовательность/строку с символами из данной строки начиная с позиции start до конца строки/заканчивая символом с позиции end. Новая строка содержит символы от start до end — 1, поэтому берём на один символ больше. Если указать индекс вне границ строки, то возникнет исключение StringIndexOutOfBoundsException. public char[] toCharArray() Копирует символы в этой строке в массив символов. Тот же результат можно получить через метод getChars(). Документация не рекомендует использовать данный метод, предлагая метод charAt(). public String toLowerCase() и другие перегруженные версии Преобразовывает строку в нижний регистр. Преобразованием управляет заданный по умолчанию региональный язык. public String toString () Возвращает строку. Для самой строки, которая сама уже является строкой, возвращать строку бессмысленно (о, как я загнул). Но на самом деле этот метод очень полезен для других классов. public String toUpperCase() Преобразовывает строку в верхний регистр. Преобразованием управляет заданный по умолчанию региональный язык. public String trim() Удаляет пробелы в начале и в конце строки. public static String valueOf(long value) и другие перегруженные версии Конвертирует содержимое (числа, объекты, символы, массивы символов) в строку. Генерируем случайную строку Допустим, нам нужна случайная строка из заданных символов. Сравнение строк: equals() или ==? Хотя в двух переменных содержится одно и то же слово, мы имеем дело с двумя разными объектами и оператор == вернёт false. Однажды, когда деревья были большими, мне понадобилось сравнить две строки из разных источников. Хотя строки выглядели совершенно одинаково, сравнение при помощи оператора == возвращало false и путало мне все карты. И только потом я узнал, что нужно использовать метод equals(). Строка в Java — это отдельный объект, который может не совпадать с другим объектом, хотя на экране результат выводимой строки может выглядеть одинаково. Просто Java в случае с логическим оператором == (а также !=) сравнивает ссылки на объекты (при работе с примитивами такой проблемы нет): Сортировка символов в строке Есть несколько способов сортировки символов в заданной строке. Рассмотрим их. Способ первый. Конвертируем строку в массив символов через toCharArray(). Запускаем два цикла. При сравнении символов нужно учитывать их регистр, поэтому мы не только сравниваем разные символы, но и одинаковые, чтобы символы в верхнем и нижнем регистре тоже были отсортированы. Способ прекрасно работает на английских символах. Но строка «Котёнок» даст неправильный результат: Ккноотё. Символ «ё» попал в самый конец массива. Способ второй. Обходимся без циклов и используем метод sort(). Проблема с «ё» осталась. При этом появилась другая проблема — сначала идут символы в верхнем регистре, потом в нижнем. Получилось КОкнотё. Переписываем пример с использованием Comparator. Проблема с «ё» осталась, но с регистрами всё хорошо. Кстати, в Java 8 можно использовать Stream для подобных операций. В любом случае будьте внимательные с символами другой локали. Ни один пример не решил наших проблем. StringTokenizer Класс StringTokenizer разбивает строку на токены с указанным разделителем. Перевернуть строку Рассмотрим различные способы решения задачи. Первый способ — представить строку в виде массива символов. Затем проходимся по всей длине массива с конца и получаем новую строку. Можно не создавать массив символов, а извлекать каждый символ через метод charAt() и снова использовать цикл, прибавляя к символу предыдущую строку. Можно воспользоваться готовым методом reverse() класса StringBuffer/StringBuilder. Экзотический способ при помощи редко используемого класса Stack. Разбиваем строку на массив символов и кладём каждый символ в стек. Далее начинаем брать элементы с верхушки стека. Из-за особенностей стека (первый вошёл, последний вышел), элементы будут браться задом-наперёд и мы получим нужный результат. Особо упоротые программисты могут написать примеры с использованием рекурсии и побитового оператора XOR. Эти варианты не будем рассматривать. Источник
- Way 4: adding double quotes (“”) to byte value
- Way 5: Using append() method of StringBuffer & StringBuilder
- Auto-boxing of Byte wrapper-type to primitive byte data-type and vice-versa
- 2 примера для преобразования массива Byte [] в строку в Java
- Как преобразовать byte [] в строку в Java
- Byte to string android studio
- Java преобразование строки в число (STRING to NUMBER)
- String to byte
- String to short
- String to int
- String to long
- String to float
- String to double
- String to boolean
- Класс String
- Операторы + и += для String
- Форматирование строк
- Строковой ресурс
- Извлечь строки из строковых массивов в ресурсах
- Методы
- public char charAt (int index)
- public int codePointAt(int index)
- public int codePointBefore(int index)
- public int codePointCount(int start, int end)
- public int compareTo(String string)
- public int compareToIgnoreCase (String string)
- public String concat (String string)
- public boolean contains (CharSequence cs)
- public boolean contentEquals(CharSequence cs)
- public boolean contentEquals(StringBuffer strbuf)
- public static String copyValueOf(char[] data)
- public static String copyValueOf (char[] data, int start, int length)
- public boolean endsWith(String suffix)
- public boolean equals (Object string)
- public boolean equalsIgnoreCase(String string)
- public static String format(Locale locale, String format, Object. args)
- public byte[] getBytes()
- public byte[] getBytes(String charsetName)
- public void getBytes(int start, int end, byte[] data, int index) и другие перегруженные версии
- public void getChars(int start, int end, char[] buffer, int index)
- public int hashCode()
- public int indexOf(int ch)
- public int indexOf (int ch, int fromIndex)
- public int indexOf (String str)
- public int indexOf (String str, int fromIndex)
- public String intern ()
- public boolean isEmpty ()
- public int lastIndexOf (String string) и другие перегруженные версии
- public static String join (CharSequence delimiter, CharSequence. elements)
- public int length()
- public boolean matches(String regularExpression)
- public int offsetByCodePoints (int index, int codePointOffset)
- public boolean regionMatches (int thisStart, String string, int start, int length)
- public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
- public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
- public String replaceAll (String regularExpression, String replacement)
- public String replaceFirst (String regularExpression, String replacement)
- public String[] split (String regularExpression) и другие перегруженные версии
- public boolean startsWith(String prefix)
- public boolean startsWith(String prefix, int start)
- public CharSequence subSequence (int start, int end)
- public String substring(int start) и другие перегруженные версии
- public char[] toCharArray()
- public String toLowerCase() и другие перегруженные версии
- public String toString ()
- public String toUpperCase()
- public String trim()
- public static String valueOf(long value) и другие перегруженные версии
- Генерируем случайную строку
- Сравнение строк: equals() или ==?
- Сортировка символов в строке
- StringTokenizer
- Перевернуть строку
How to convert byte[] array to String in Java
By mkyong | Last updated: September 15, 2020
Viewed: 1,336,218 (+3,569 pv/w)
In Java, we can use new String(bytes, StandardCharsets.UTF_8) to convert a byte[] to a String.
For text or character data, we use new String(bytes, StandardCharsets.UTF_8) to convert a byte[] to a String . However, for cases that byte[] is holding the binary data like the image or other non-text data, the best practice is to convert the byte[] into a Base64 encoded String.
- For text data byte[] , we use new String(bytes, StandardCharsets.UTF_8) , UTF-8 for character encoding.
- For binary data byte[] , we use the Base64 binary encoding.
1. Convert byte[] to String (text data)
The below example converts a string to a byte array and vice versa.
2. Convert byte[] to String (binary data)
The below example convert an image phone.png into a byte[] , and uses the Java 8 Base64 class to convert the byte[] to a Base64 encoded String. Later, we convert the Base64 encoded string back to the original byte[] and save it into another image named phone2.png .
Download Source Code
References
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.
Comments
Thanks for the information. Could you also please let me know how to convert Byte[] (capital B) to String. The above code does not work for the nonprimitive Byte[]. Thank you.
Byte[] and byte[] are incompatible (you can google “boxed primitive arrays” for more info). You probably need to explicitly convert, like
//assume you have a value Byte[] bytes
byte[] primitiveArray = new byte[bytes.length];
for (int i = 0; i
Byte is a class, its not a datatype. Whereas byte[] array is a datatype. It will be more clear from the code snippet below:
byte b = 18;
Byte wrappedByte = new Byte(b);
The issue I find with this byte string conversion is starting from byte <], convert it to String, then retrieve the original byte<>again!
The most stable solution I found so far is using sun.misc.BASE64Encoder().encode(myByte) and sun.misc.BASE64Decoder().decodeBuffer(myString) but with a java sun warning!
Any one with a better solution?
Why do you specify the encoding UTF-8 when converting from bytes to string, but not string to bytes? I think when you call the “getBytes” method you should also pass StandardCharsets.UTF_8, otherwise you will get a result using the platform default encoding, which may be UTF-16. When you convert back to a string, and specify the encoding of UTF-8 specifically, it won’t work if that was a UTF-16 string with supplementary characters.
please tell me a program source code in java that convert text to binary and binary to text.
For binary data, we need Base64 encoder, see above example 2.
If you want to find the binary of a singular alphabet, then you can make use of Ascii codes as given below:
//—————————————————————————————————————————//
public class TexttoBinary <
Источник
Byte to String conversion in Java – 5 ways
In this article, we will discuss various ways to convert Byte to String in Java
Byte:
- Size is 1 byte
- Its range is -128 to 127
Various ways to convert Byte to String
- using Byte.toString(byteVal);
- using String.valueOf(byteVal);
- create Byte object and then convert to String using toString() method
- adding double quotes (“”) to byte value
- using append() method of StringBuffer or StringBuilder
Read String class in detail with example
Let us move forward and discuss all possible ways to convert Byte to String in Java
Way 1: Using Byte.toString(byteVal); method
- This method can be used to convert primitive byte data-type or Byte wrapper-type to String object
Method signature:
ConvertByteToStringUsingToStringMethod.java
Output:
Way 2: Using String.valueOf(byteVal); method
- This method can be used to convert primitive byte data-type or Byte wrapper-type to String object
Method signature:
ConvertByteToStringUsingValueOfMethod.java
Output:
Way 3: create Byte object and then convert to String using toString() method - Here, we will create new Byte object with primitive byte value as constructor-argument
- After creating new Byte object by passing primitive byte value, then invoke toString() method for converting primitive byte data-type to String object
Method signature:
ConvertByteToStringUsingObjectCreation.java
Output:
Way 4: adding double quotes (“”) to byte value
- Note: for this conversion to work, double-quotes (“”) must be added at the start of the concatenation
Syntax:
ConvertByteToStringByAddingDoubleQuotes.java
Output:
Way 5: Using append() method of StringBuffer & StringBuilder
- This method can be used to convert primitive byte data-type to String object by appending to StringBuffer or StringBuilder object
- And then invoking toString() method
Syntax:
ConvertByteToStringByAppending.java
Output:
Auto-boxing of Byte wrapper-type to primitive byte data-type and vice-versa
- Auto-boxing feature available from Java 1.5 version
- So, converting primitive data-type to wrapper-type can easily be done, by directly assigning
- Let’s see one example based on this auto-boxing feature
AutoBoxingFeatureForByteConversion.java
Output:
Hope, you found this article very helpful. If you have any suggestion or want to contribute any other way or tricky situation you faced during Interview hours, then share with us. We will include that code here.
Источник
2 примера для преобразования массива Byte [] в строку в Java
Преобразование байтового массива в String кажется простым, но трудно сделать это правильно. Многие программисты делают ошибку, игнорируя кодировку символов всякий раз, когда байты преобразуются в String или char или наоборот. Как программист, мы все знаем, что компьютер понимает только двоичные данные, то есть 0 и 1. Все, что мы видим и используем, например изображения, текстовые файлы, фильмы или любые другие мультимедийные файлы, хранится в виде байтов, но что более важно это процесс кодирования или декодирования байтов в символ. Преобразование данных является важной темой на любом собеседовании по программированию, и из-за хитрости кодирования символов эти вопросы являются одним из самых популярных вопросов о интервью в формате String в интервью Java. При чтении строки из входного источника, например, файлов XML, HTTP-запроса, сетевого порта или базы данных, вы должны обратить внимание на то, какую кодировку символов (например, UTF-8, UTF-16 и ISO 8859-1) они кодируют. Если вы не будете использовать ту же кодировку символов при преобразовании байтов в строку , вы получите поврежденную строку, которая может содержать совершенно неправильные значения. Вы могли видеть ?, квадратные скобки после преобразования byte [] в String, это из-за значений, которые ваша текущая кодировка символов не поддерживает, и просто показывает некоторые значения мусора.
Я пытался понять, почему программы делают ошибки кодирования символов чаще, чем нет, и мои небольшие исследования и собственный опыт позволяют предположить, что это может быть вызвано двумя причинами: во-первых, недостаточно для интернационализации и кодировки символов, а во-вторых, потому что символы ASCII поддерживаются почти все популярные схемы кодирования и имеют одинаковые значения. Поскольку мы в основном имеем дело с кодировкой, такой как UTF-8, Cp1252 и Windows-1252, которая отображает символы ASCII (в основном алфавиты и цифры) без сбоев, даже если вы используете другую схему кодирования. Настоящая проблема возникает, когда ваш текст содержит специальные символы, например «é» , который часто используется во французских именах. Если кодировка символов вашей платформы не распознает этот символ, то либо вы увидите другой символ, либо что-то в этом роде, и, к сожалению, пока вы не обожгете руки, вы вряд ли будете осторожны с кодировкой символов. В Java все немного сложнее, потому что многие классы ввода-вывода, например InputStreamReader, по умолчанию используют кодировку символов платформы. Это означает, что если вы запустите свою программу на другом компьютере, вы, скорее всего, получите другой вывод из-за разного кодирования символов, используемого на этом компьютере. В этой статье мы узнаем, как преобразовать byte [] в String в Java как с помощью JDK API, так и с помощью общих утилит Guava и Apache.
Как преобразовать byte [] в строку в Java
Есть несколько способов изменить байтовый массив на String в Java, вы можете использовать методы из JDK или использовать бесплатные API с открытым исходным кодом, такие как Apache commons и Google Guava. Этот API предоставляет как минимум два набора методов для создания байтового массива формы String; один, который использует кодировку платформы по умолчанию, а другой — кодировку символов. Вы всегда должны использовать позже, не полагайтесь на кодировку платформы. Я знаю, что это может быть то же самое, или вы, возможно, не сталкивались с какими-либо проблемами, но лучше быть в безопасности, чем потом сожалеть. Как я указывал в своем последнем посте о печати байтового массива в виде шестнадцатеричной строки , это также один из лучших способов указания кодировки символов при преобразовании байтов в символы на любом языке программирования. Возможно, ваш байтовый массив содержит непечатаемые символы ASCII. Давайте сначала посмотрим, как JDK преобразует byte [] в String:
- Вы можете использовать конструктор String, который принимает байтовый массив и кодировку символов:
Это правильный способ преобразования байтов в строку, если вы точно знаете, что байты кодируются в кодировке символов, которую вы используете.
Если вы читаете байтовый массив из любого текстового файла, например, XML-документа, HTML-файла или двоичного файла, вы можете использовать библиотеку Apache Commons IO для непосредственного преобразования FileInputStream в строку. Этот метод также буферизует входные данные для внутреннего использования, поэтому нет необходимости использовать другой BufferedInputStream .
Чтобы правильно преобразовать этот байтовый массив в строку, вы должны сначала обнаружить правильную кодировку символов, прочитав метаданные, например Content-Type, и т. Д., В зависимости от формата / протокола данных, которые вы читаете. , Это одна из причин, по которой я рекомендую использовать парсеры XML, например парсеры SAX или DOM, для чтения XML-файлов, они сами занимаются кодированием символов.
Некоторые программисты также рекомендуют использовать Charset over String для определения кодировки символов, например, вместо «UTF-8» используйте StandardCharsets.UTF_8, главным образом, чтобы избежать исключения UnsupportedEncodingException в худшем случае. Существует шесть стандартных реализаций Charset, которые гарантированно поддерживаются всеми реализациями платформы Java. Вы можете использовать их вместо указания схемы кодирования в String. Короче говоря, всегда предпочитайте StandardCharsets.ISO_8859_1 вместо «ISO_8859_1», как показано ниже:
Другие стандартные кодировки, поддерживаемые платформой Java:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Если вы читаете байты из входного потока, вы также можете проверить мой предыдущий пост о 5 способах преобразования InputStream в String в Java для получения подробной информации.
Источник
Byte to string android studio
Иногда возникают ситуации, когда имея величину какого-либо определенного типа, необходимо присвоить ее переменной другого типа. С переменными и их типами мы познакомились в прошлом уроке, в этом уроке мы рассмотрим наиболее популярные преобразования типов в Java:
Java преобразование строки в число (STRING to NUMBER)
В следующих примерах будет использована конструкция try-catch. Это необходимо для обработки ошибки, в случае, если строка содержит иные символы кроме чисел или число, выходящее за рамки диапазона допустимых значений определенного типа.
Например, строка «somenumber» не может быть переведена в тип int или в любой другой числовой тип. В это случае, при компеляции возникнет ошибка. Чтобы этого избежать, следует обезопаситься с помощью конструкции try-catch.
String to byte
C использованием конструктора
С использованием метода valueOf класса Byte
С использованием метода parseByte класса Byte
Перевод строки в массив байтов и обратно из массива байтов в строку
String to short
C использованием конструктора
C использованием метода valueOf класса Short
C использованием метода parseShort класса Short
String to int
C использованием конструктора
C использованием метода valueOf класса Integer
C использованием метода parseInt класса Integer
String to long
C использованием конструктора
C использованием метода valueOf класса Long
C использованием метода parseLong класса Long
String to float
С использованием конструктора
C использованием метода valueOf класса Float
C использованием метода parseFloat класса Float
String to double
С использованием конструктора
C использованием метода valueOf класса Double
C использованием метода parseDouble класса Double
String to boolean
Преобразование строки в логический тип 2мя способами. Обратите внимание, что строка не соответствующая true, будет преобразована в логическое значение false.
Источник
Класс String
Класс String очень часто используется программистами, поэтому его следует изучить очень хорошо.
Следует помнить, что объекты класса String являются неизменяемыми (immutable). Поэтому, когда вам кажется, что вы меняете строку, то на самом деле вы создаёте новую строку.
В Java есть специальные классы StringBuffer и StringBuilder, который допускают изменения в строке.
Классы String, StringBuffer, StringBuilder определены в пакете java.lang и доступны автоматически без объявления импорта. Все три класса реализуют интерфейс CharSequence.
Создать строку очень просто. Например, можно так:
Можно создать массив строк:
Можно создать пустой объект класса String:
Можно создать строку через массив символов:
Есть ещё конструктор, позволяющий задать диапазон символьного массива. Вам нужно указать начало диапазона и количество символов для использования:
Можно создать объект класса String из объекта классов StringBuffer и StringBuilder при помощи следующих конструкторов:
Операторы + и += для String
На языке Java знак плюс (+) означает конкатенацию строк (concatenation), иными словами — объединение строк.
Если один из операндов в выражении содержит строку, то другие операнды также должны быть строками. Поэтому Java сама может привести переменные к строковому представлению, даже если они не являются строками.
За кулисами Java за нас преобразовало число 4 в строку «4».
Форматирование строк
Предположим у нас есть строковый ресурс:
Чтобы вывести эту строку программно в элементе TextView, можно использовать код:
Представьте себе, что у вас несколько котов. Можно, конечно, завести для каждого кота свою строку. Но ведь строки очень похожи, меняются только имена и возраст. Также можно менять число лап и хвостов (что вы курите?).
В таких случаях можно применить форматирование строк. Нужно определить слова, которые мы будем менять и заменить их на специальный набор символов, которые начинаются с символа процента, затем идет число, увеличивающееся на единицу, далее $s для строк или $d для чисел. Итак, изменим наш строковой ресурс так:
Внесём изменения в код:
Если вас есть кот Васька и ему шесть лет, то добавляем две переменные и форматируем строку
Здесь показан простейший пример с форматированием. Помните о нём и применяйте в нужных местах.
Строковой ресурс
Строки желательно хранить в ресурсах (о ресурсах есть отдельная статья).
Программно доступ к строковому ресурсу делается так:
Извлечь строки из строковых массивов в ресурсах
Предположим, у вас есть строковый массив, определённый в файле strings.xml под именем cats_array. Тогда получить доступ к строкам из ресурсов можно так:
Методы
public char charAt (int index)
Возвращает символ с указанным смещением в этой строке. Отсчёт идёт от 0. Не надо использовать отрицательные и несуществующие значения, будьте серьёзнее. Для извлечения нескольких символов используйте getChars().
public int codePointAt(int index)
Возвращает Unicode-символ в заданном индексе
public int codePointBefore(int index)
Возвращает Unicode-символ, который предшествует данному индексу
public int codePointCount(int start, int end)
Вычисляет количество Unicode-символов между позициями start и end
public int compareTo(String string)
Сравнивает указанную строку, используя значения символов Unicode и вычисляет, какая из строк меньше, равна или больше следующей. Может использоваться при сортировке. Регистр учитывается. Если строки совпадают, то возвращается 0, если меньше нуля, то вызывающая строка меньше строки string, если больше нуля, то вызывающая строка больше строки string. Слова с большим регистром стоят выше слова с нижним регистром.
Отсортируем массив строк через пузырьковую сортировку.
В результате мы получим:
Как видите, от перемены мест слагаемых сумма сортировки коты не меняются.
public int compareToIgnoreCase (String string)
Сравнивает указанную строку, используя значения символов Unicode, без учёта регистра.
public String concat (String string)
Объединяет строку с указанной строкой. Возвращается новая строка, которая содержит объединение двух строк. Обратите внимание, что само имя метода содержит кота!
Метод выполняет ту же функцию, что и оператор + и можно было написать Сук + кот . Но настоящий кошатник будет использовать «кошачий» метод.
public boolean contains (CharSequence cs)
Определяет, содержит ли строка последовательность символов в CharSequence
public boolean contentEquals(CharSequence cs)
Сравнивает CharSequence с этой строкой.
public boolean contentEquals(StringBuffer strbuf)
Сравнивает StringBuffer с этой строкой
public static String copyValueOf(char[] data)
Создаёт новую строку, содержащую символы из указанного массива. Изменение массива после создания строки не изменяет созданную строку.
public static String copyValueOf (char[] data, int start, int length)
Создаёт новую строку, содержащую указанные символы из массива data начиная с позиции start (нумерация начинается с нуля) длинной length.
Если указать индекс вне границ строки, то возникнет исключение StringIndexOutOfBoundsException.
public boolean endsWith(String suffix)
Проверяет, заканчивается ли строка символами suffix.
public boolean equals (Object string)
Сравнивает указанный объект и строку и возвращает true, если сравниваемые строки равны, т.е. содержит те же символы и в том же порядке с учётом регистра.
Не путать метод с оператором ==, который сравнивает две ссылки на объекты и определяет, ссылаются ли они на один и тот же экземпляр. Смотри пункт Сравнение строк: equals() или ==?
public boolean equalsIgnoreCase(String string)
Сравнивает указанную строку с исходной строкой без учёта регистра и возвращает true, если они равны. Диапазон A-Z считается равным диапазону a-z.
public static String format(Locale locale, String format, Object. args)
Возвращает отформатированную строку, используя прилагаемый формат и аргументы, локализованных в данной области. Например дату или время
Склеиваем два слова, которые выводятся с новой строки. При этом второе слово выводится в верхнем регистре.
Конвертируем число в восьмеричную систему.
По аналогии выводим в шестнадцатеричной системе
Для верхнего регистра используйте %X, тогда вместо ff будет FF.
Для десятичной системы используйте %d.
Дату тоже можно выводить по разному.
Допустим, при выводе double получается 3.0. Как вывести 3, т.е. без нуля. И с учётом того, что например 3.1 должно выводиться как 3.1. Округление здесь не поможет.
public byte[] getBytes()
Конвертируем строку в набор байтов.
public byte[] getBytes(String charsetName)
Возвращает отформатированную строку, используя прилагаемую кодировку.
public void getBytes(int start, int end, byte[] data, int index) и другие перегруженные версии
Метод сохраняет символы в массив байтов, альтернатива методу getChars(). Часто используется при экспорте строк из различных источников, где используются другие символы Unicode. Например, Java по умолчанию использует 16-битовые символы Unicode, а в интернете часто строки используют 8-битовый код Unicode, ASCII и др.
public void getChars(int start, int end, char[] buffer, int index)
Метод для извлечения нескольких символов из строки. Вам надо указать индекс начала подстроки (start), индекс символа, следующего за концом извлекаемой подстроки (end). Массив, который принимает выделенные символы находится в параметре buffer. Индекс в массиве, начиная с которого будет записываться подстрока, передаётся в параметре index. Следите, чтобы массив был достаточного размера, чтобы в нём поместились все символы указанной подстроки.
public int hashCode()
Возвращает целое число — хэш-код для данного объекта.
public int indexOf(int ch)
Ищет появление указанного символа и возвращает позицию индекса. Если символа нет, то возвращается -1.
public int indexOf (int ch, int fromIndex)
Ищет индекс символа сh, начиная с позиции fromIndex
public int indexOf (String str)
Ищет подстроку str и возвращает индекс найденной подстроки. Если подстроки не существует, то возвращается -1.
public int indexOf (String str, int fromIndex)
Ищет подстроку str, начиная с позиции fromIndex и возвращает индекс найденной подстроки. Если подстроки не существует, то возвращается -1.
Смотри также схожий метод lastIndexOf().
public String intern ()
public boolean isEmpty ()
Проверяет, является ли строка пустой
Данный метод появился в API 9 (Android 2.1). Для старых устройств используйте String.length() == 0
public int lastIndexOf (String string) и другие перегруженные версии
Метод ищет в строке в обратном порядке и возвращает индекс последнего появления указанного символа. Если указанный символ не найден, то возвратится -1. Например, получить имя файла без расширения можно так:
public static String join (CharSequence delimiter, CharSequence. elements)
Метод появился в API 26. Склеивает слова указанным разделителем. Если слово является null, то null будет использоваться в качестве слова. Есть перегруженная версия.
В этом примере мы получаем позицию последней точки и получаем подстроку до неё.
public int length()
Возвращает длину строки
public boolean matches(String regularExpression)
Проверяет, соответствует ли строка регулярным выражениям.
public int offsetByCodePoints (int index, int codePointOffset)
Возвращает позицию, расположенную на расстоянии codePointOffset после начальной позиции, заданной параметром index
public boolean regionMatches (int thisStart, String string, int start, int length)
Метод сравнивает указанную часть строки с другой частью строки. Нужно задать индекс начала диапазон строки вызывающего объекта класса String. Строка для сравнивания передаётся в параметре string. Индекс символа, начиная с которого нужно выполнять сравнение передаётся в параметре start, а длина сравниваемой подстроки в параметре length.
public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
Перегруженная версия. Метод сравнивает указанную часть строки с другой частью строки, игнорируя регистр.
public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
Меняет символ или последовательность символов target на replacement
public String replaceAll (String regularExpression, String replacement)
Смотри также пример в задачнике — Удаление гласных из строки.
public String replaceFirst (String regularExpression, String replacement)
Удаляет первые символы при помощи регулярного выражения.
Например, если нужно удалить нули в начале чисел 001, 007, 000024, то можно использовать такой вызов.
public String[] split (String regularExpression) и другие перегруженные версии
Разбивает строку на массив из слов. Например, есть строка Васька Рыжик Мурзик Барсик и мы хотим получить массив имён котов:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
Также можно использовать регулярное выражение \\s+, чтобы учитывать любые типы пробелов, включая двойные и более пробелы подряд.
Будьте аккуратны при разбиении по запятой. Часто после запятой идёт пробел, поэтому нужно правильно установить разделитель.
Если исходная строка начинается с разделителя, первым элементом результирующего массива будет пустая строка. Но если исходная строка заканчивается разделителем, то пустой строки не будет.
У перегруженной версии метода есть дополнительный параметр limit, определяющий, какое количество раз шаблон regex будет применяться к исходной строке.
Также следует быть аккуратным с разделителем |. В регулярных выражениях | является специальным символом. Чтобы использовать вертикальную черту в качестве разделителя, нужно экранировать этот символ с помощью двух обратных слешей «\\|».
public boolean startsWith(String prefix)
Проверяет, начинается ли строка символами prefix с начала строки
public boolean startsWith(String prefix, int start)
Проверяет, начинается ли заданная строка символами prefix с указанной позиции.
public CharSequence subSequence (int start, int end)
Аналогичен методу substring(), но может использоваться для CharSequence.
public String substring(int start) и другие перегруженные версии
Создаёт новую последовательность/строку с символами из данной строки начиная с позиции start до конца строки/заканчивая символом с позиции end. Новая строка содержит символы от start до end — 1, поэтому берём на один символ больше.
Если указать индекс вне границ строки, то возникнет исключение StringIndexOutOfBoundsException.
public char[] toCharArray()
Копирует символы в этой строке в массив символов. Тот же результат можно получить через метод getChars(). Документация не рекомендует использовать данный метод, предлагая метод charAt().
public String toLowerCase() и другие перегруженные версии
Преобразовывает строку в нижний регистр. Преобразованием управляет заданный по умолчанию региональный язык.
public String toString ()
Возвращает строку. Для самой строки, которая сама уже является строкой, возвращать строку бессмысленно (о, как я загнул). Но на самом деле этот метод очень полезен для других классов.
public String toUpperCase()
Преобразовывает строку в верхний регистр. Преобразованием управляет заданный по умолчанию региональный язык.
public String trim()
Удаляет пробелы в начале и в конце строки.
public static String valueOf(long value) и другие перегруженные версии
Конвертирует содержимое (числа, объекты, символы, массивы символов) в строку.
Генерируем случайную строку
Допустим, нам нужна случайная строка из заданных символов.
Сравнение строк: equals() или ==?
Хотя в двух переменных содержится одно и то же слово, мы имеем дело с двумя разными объектами и оператор == вернёт false.
Однажды, когда деревья были большими, мне понадобилось сравнить две строки из разных источников. Хотя строки выглядели совершенно одинаково, сравнение при помощи оператора == возвращало false и путало мне все карты. И только потом я узнал, что нужно использовать метод equals(). Строка в Java — это отдельный объект, который может не совпадать с другим объектом, хотя на экране результат выводимой строки может выглядеть одинаково. Просто Java в случае с логическим оператором == (а также !=) сравнивает ссылки на объекты (при работе с примитивами такой проблемы нет):
Сортировка символов в строке
Есть несколько способов сортировки символов в заданной строке. Рассмотрим их.
Способ первый. Конвертируем строку в массив символов через toCharArray(). Запускаем два цикла. При сравнении символов нужно учитывать их регистр, поэтому мы не только сравниваем разные символы, но и одинаковые, чтобы символы в верхнем и нижнем регистре тоже были отсортированы.
Способ прекрасно работает на английских символах. Но строка «Котёнок» даст неправильный результат: Ккноотё. Символ «ё» попал в самый конец массива.
Способ второй. Обходимся без циклов и используем метод sort().
Проблема с «ё» осталась. При этом появилась другая проблема — сначала идут символы в верхнем регистре, потом в нижнем. Получилось КОкнотё.
Переписываем пример с использованием Comparator.
Проблема с «ё» осталась, но с регистрами всё хорошо.
Кстати, в Java 8 можно использовать Stream для подобных операций. В любом случае будьте внимательные с символами другой локали. Ни один пример не решил наших проблем.
StringTokenizer
Класс StringTokenizer разбивает строку на токены с указанным разделителем.
Перевернуть строку
Рассмотрим различные способы решения задачи.
Первый способ — представить строку в виде массива символов. Затем проходимся по всей длине массива с конца и получаем новую строку.
Можно не создавать массив символов, а извлекать каждый символ через метод charAt() и снова использовать цикл, прибавляя к символу предыдущую строку.
Можно воспользоваться готовым методом reverse() класса StringBuffer/StringBuilder.
Экзотический способ при помощи редко используемого класса Stack.
Разбиваем строку на массив символов и кладём каждый символ в стек. Далее начинаем брать элементы с верхушки стека. Из-за особенностей стека (первый вошёл, последний вышел), элементы будут браться задом-наперёд и мы получим нужный результат.
Особо упоротые программисты могут написать примеры с использованием рекурсии и побитового оператора XOR. Эти варианты не будем рассматривать.
Источник