Как превратить массив символов в строку
Я застрял на 3 шаге. Может кто написать как это сделать? Можно объяснением или блоком кода.
Отслеживать
5,185 3 3 золотых знака 23 23 серебряных знака 48 48 бронзовых знаков
задан 4 дек 2015 в 0:11
313 1 1 золотой знак 2 2 серебряных знака 10 10 бронзовых знаков
Все слова строки нужно писать с большой?
4 дек 2015 в 0:13
Да. В том и дело что символы я смог сделать большими, но как их объеденить в 1 строку, не знаю.
4 дек 2015 в 0:16
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
Делать можно по-разному, конечно, но в Java есть методы для работы со строками. По-хорошему, нужно делать так:
- Разбить строку по пробелам на слова и записать в массив
- Пройтись по массиву, заменяя первые символы на символы верхнего регистра и складывая в одну строку.
Никаких массивов char использовать не нужно. Вам понадобятся следующие методы String и Character :
- split(String regex) — делит строку на массив по какому-то правилу
- charAt(int index) — возвращает символ по указанному индексу
- toUpperCase(char ch) — переводит в верхний регистр
- substring(int beginIndex) — возвращает подстроку, начиная с указанного индекса
Если в строке есть несколько пробелов и их нужно учитывать при сборке текста обратно, то алгоритм будет такой:
Проходимся по строке:
- Если символ на данной позиции пробел, то запоминаем это событие
- Иначе, если символом на предыдущей позиции был пробел по Java (обычный пробел, табуляция и т.д.) либо начало строки, то заменяем его на символ верхнего регистра Вам понадобятся следующие методы StringBuilder и Character :
- length() — возвращает длину строки
- charAt(int index) — возвращает символ на заданной позиции
- isWhitespace(char ch) — проверяет, является ли символ пробелом по Java
- setCharAt(int index, char ch) — заменяет символ на заданной позиции на указанный
- toUpperCase(char ch) — переводит в верхний регистр
Отслеживать
ответ дан 4 дек 2015 в 0:23
5,185 3 3 золотых знака 23 23 серебряных знака 48 48 бронзовых знаков
substring() еще, скорее всего, пригодиться.
4 дек 2015 в 0:31
Благодарю, но я буквально с минуту назад нашел другое решение с помощью toCharArray(), а перевод осуществил с помощью Character.toString(b[i]). Конечно это было в цикле.
4 дек 2015 в 0:33
@IntFloat, верное замечание. Добавляю к ответу. Спасибо.
4 дек 2015 в 0:34
не понял как заносить в код
4 дек 2015 в 0:38
@Tayker, вы можете ответить на свой вопрос. Внизу есть синяя кнопочка.
4 дек 2015 в 0:38
Эта операция называется capitalize , причем независимо от языка. Не зная Java вовсе, я загуглил Java capitalize и первая(!) ссылка дала:
WordUtils.capitalize(string)
Собственно, в одну строку без сторонних библиотек:
str = str.replaceAll("((^|\\s+)(\\w))", "$2\\u\\$3");
Честно говоря, не знаю, работает ли \u в Java, но можно так:
str = str.replaceAll("((^|\\s+)(\\w))", "$2" + "$3".toUpperCase());
Регулярка ищет либо первый буквенный символ в строке, либо букву, которая стоит за произвольным числом пробелов и приводит ее в верхний регистр, сохраняя то, что было перед ней (то самое число пробелов, либо ничего). Java у меня нет, тестил на perl, там работает.
П.С. внешние круглые скобки, вероятно, не нужны.
К сожалению, предложенный мной способ без WordUtils не сработает в Java по нескольким причинам. Задачка заинтересовала, поэтому приведу ее решение на паре других языков.
1) perl. Круче всего. Одна строчка. Даже функцию писать нет никакого смысла. perl, ИМХО, круче всех языков работает со строками:
my $s = "simple string - example, а теперь Русский текст"; $s =~ s/(\b\w)/\u$1/g; print "$s\n";
2) python. (Решение в Java будет аналогичным, в 2.х Питоне работает только с английскими буквами, увы)
def capitalize(s): for g in re.finditer(r"^|\s+\w", s): s = s.replace(g.group(0), g.group(0).upper(), 1) return s if __name__ == "__main__": s = capitalize("my text solo\t\t\t\tstring\nmmm") print s
Отслеживать
ответ дан 4 дек 2015 в 4:53
7,461 13 13 серебряных знаков 31 31 бронзовый знак
Стоит упомянуть, что в этом решении требуется сторонняя библиотека org.apache.commons:commons-lang3 , которую следует добавить в зависимости проекта.
4 дек 2015 в 5:14
@pavlofff, спасибо, стоило конечно это отметить. Я больше к тому, что стоит знать стандартное название более-менее стандартной операции, и пользоваться гуглом.
4 дек 2015 в 5:21
BufferedReader reader = new BufferedReader(new InputStreamReader(System. in )); String s = reader.readLine(); char[] b = s.toCharArray(); if (b[0] != ' ') b[0] = Character.toUpperCase(b[0]); for (int i = 0; i < b.length - 1; i++) < if (b[i] == ' ' && b[i + 1] != ' ') < b[i + 1] = Character.toUpperCase(b[i + 1]); >> String result = ""; for (int i = 0; i
Отслеживать
5,185 3 3 золотых знака 23 23 серебряных знака 48 48 бронзовых знаков
ответ дан 4 дек 2015 в 0:41
313 1 1 золотой знак 2 2 серебряных знака 10 10 бронзовых знаков
И в правду. не задумывался над этим. Все из-за (b[i+1]) или как?
4 дек 2015 в 1:02
Я чуть-чуть поправил ваш код. Надеюсь, вы не против 🙂 Ответ может кому-то помочь в дальнейшем.
4 дек 2015 в 1:53
@LEQADA ну да :() так лучше.
4 дек 2015 в 2:44
Если отвечать прямо на вопрос, то нужно воспользоваться соответствующим конструктором:
String str = new String(b);
Отслеживать
ответ дан 6 дек 2015 в 11:33
2,171 15 15 серебряных знаков 21 21 бронзовый знак
String s = b.toString();
Также преобразуется обратно
char[] b = s.toCharArray();
Отслеживать
ответ дан 4 дек 2015 в 13:59
11 1 1 бронзовый знак
b.toString() и было использовано в коде
4 дек 2015 в 14:49
Как по мне это самый легкий способ
char[] c = ; String s = new String(с);
Отслеживать
1,086 7 7 серебряных знаков 12 12 бронзовых знаков
ответ дан 31 мар 2017 в 21:06
если нужно в строке текста каждый первый символ сделать из маленьких букв в большие то предлагаю такой вариант с пояснением: (может кому пригодится)
String str1 = "hot, java"; System.out.println( "рабочая строка : " + str1 ); String[] array = str1.split( " " ); // заполняем массив типа string словами System.out.println( "после сплита первое поле массива : " + array[0] ); System.out.println( "после сплита второе поле массива : " + array[1] ); System.out.println( "количество полей массива типа string : " + array.length ); System.out.println( "проверка первого символа нулевого поля : " + array[0].charAt( 0 ) ); System.out.println( "проверка первого символа первого поля : " + array[1].charAt( 0 ) ); for (int i = 0; i < array.length; i++) < char x = array[i].charAt( 0 ); // тогда присваиваем его переменной х типа char x = Character.toUpperCase( x ); // меняем на верхний регистр символ в переменной х array[i] = array[i].replace( array[i].charAt( 0 ), x ); // заменяем символ в нулевой позиции нужного поля на значение х типа char >> System.out.println( "после цикла первое поле массива :" + array[0] ); System.out.println( "после цикла второе поле массива :" + array[1] ); System.out.println( "теперь нужно билдером вернуть из массива строки в одну строку" ); String finalstring = String.join( " ", array ); // разделяем пробелами при импорте в строку, т.к. сплит разбил по пробелам System.out.println( "конечный результат :" + finalstring );
Array.prototype.toString()
Метод toString() возвращает строковое представление указанного массива и его элементов.
Синтаксис
arr.toString()
Параметры
Описание
Объект Array переопределяет метод toString объекта Object . Для объектов класса Array , метод toString соединяет массив и возвращает одну строку, содержащую каждый элемент массива, разделённый запятыми. Например, следующий код создаёт массив и использует метод toString для преобразования массива в строку.
var monthNames = ["Янв", "Фев", "Мар", "Апр"]; var myVar = monthNames.toString(); // присваивает 'Янв,Фев,Мар,Апр' переменной myVar.
JavaScript вызывает метод toString автоматически, когда массив представляется текстовым значением или когда массив находится в контексте конкатенации строк.
Семантика ECMAScript 5
Начиная с JavaScript 1.8.5 (Firefox 4), и в соответствии с семантикой ECMAScript 5-го издания, метод toString() является обобщённым и может использоваться с любым объектом. В случае с массивами, если он имеет метод join() , он будет вызван и результат его работы будет возвращён. В противном случае будет вызван метод Object.prototype.toString() , и будет возвращён результат его работы.
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.tostring |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 4 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Преобразование массива в строку в JavaScript
Для обработки данных и выполнения с ними манипуляций может возникнуть потребность преобразования массива в строку. Например, когда необходимо отправить данные в строчном типе, из массива делается строка и только тогда отправляется. Либо нам просто нужно объединить все элементы массива единой строкой.
Рассмотрим различные подходы для преобразования массива в строку.
toString()
Метод toString() помогает преобразовывать различные типы данных в строку. Он выводит строку, содержащую все элементы массива, разделенные запятыми.
['a', 'b', 'c'].toString(); // 'a,b,c' ['text', 123, true].toString() // 'text,123,true'
String()
Функция осуществляет явное преобразование в строку.
String(['a', 'b', 'c']); // 'a,b,c' String(['text', 123, true]) // 'text,123,true'
concat()
В JavaScript метод concat() в основном используется для объединения нескольких строк. Однако его также можно использовать для преобразования указанного массива в строку. Для этого нужно соединить элементы массива с пустой строкой.
''.concat(['a', 'b', 'c']); // 'a,b,c'
Явное приведение
Подобно методу concat() массив можно преобразовать в строку путем обычного прибавления к нему пустой строки или пустого массива.
['a', 'b', 'c'] + []; // 'a,b,c' ['text', 123, true] + ''; // 'text,123,true'
join()
Метод join() предлагает функциональность преобразования массива в строку. Элементы массива становятся строкой, однако теперь способ их объединения можно указать в качестве аргумента метода.
['a', 'b', 'c'].join(); // 'a,b,c' (по-умолчанию разделитель ',') ['и', 'в', 'а', 'н'].join(''); // 'иван' ['text', 123, true].join('-'); // 'text-123-true'
JSON.stringify()
Метод преобразует массив в строку формата JSON, соблюдая определенные правила синтаксиса, чтобы потом ее можно было обратно преобразовать в исходное состояние или распарсить.
JSON.stringify(['a', 'b', 'c']); // '["a","b","c"]' JSON.stringify([145, false, ]); // '[145,false,]'
forEach()
Если массив необходимо сохранить, но при этом получить строку из него, используем перебирающий метод forEach() . На этапе каждой итерации обновляем созданную строку.
let array = ['a', 'b', 'c']; let string = ''; array.forEach(function(item, index) < string += item; if (index != (array.length - 1)) < string += ','; >; >); console.log(string); // => 'a,b,c'
Всё только о JavaScript
Для объединения всех элементов массива в одну строку используется метод массива join , принимающий единственным аргументом строку, которой необходимо разделить элементы.
var a = [1, 2, 3, 4]; alert(a.join('-')); // 1-2-3-4
Метод join объединяет элементы для каждого индекса от 0 до length — 1 , при этом значения undefined и null преобразуются в пустую строку, остальные элементы приводятся к строке.
var a = [1, , null, undefined, 2]; alert(a.join('-')); // 1----2
В спецификации языка указано
If no separator is provided, a single comma is used as the separator.
Т.е. если сепаратор не был передан, то в качестве него нужно использовать запятую. Данное предложение, однако, можно трактовать двояко: сепаратор не передан вообще или в качестве сепаратора передан undefined . Впрочем чуть ниже в спецификации указана чёткая инструкция.
If separator is undefined, let separator be the single-character string «,».
Т.е. если сепаратор равен undefined , то используется запятая. Именно такое поведение реализуют все браузеры, кроме Internet Explorer. IE подставляет запятую, только если join был вызван без аргументов.
var a = [1, 2, 3, 4]; alert(a.join()); // 1,2,3,4 во всех браузерах alert(a.join(undefined)); // 1undefined2undefined3undefined4 в IE, 1,2,3,4 в остальных браузерах
Метод join можно использовать также для элегантной реализации повторения строки, т.е. из строки ‘ab’ , например, получить строку ‘abababab’ . Действительно, пустые элементы массива преобразуются в пустые строки, но при этом разделяются сепаратором. Следовательно, чтобы повторить строку n раз, нужно взять пустой массив, у которого length равен n + 1 , и вызвать у него метод join с аргументом, равным размножаемой строке.
/** * Повторяет исходную строку n раз. * @param n Число повторений строки * @return Размноженная строка. */ String.prototype.times = function(n) < return new Array(n + 1).join(this); >; alert('01'.times(4)); // 01010101
Массивы, как и любой другой объект в JavaScript, имеют встроенный метод toString , вызываемый при неявном преобразовании в строку. Этот метод у них аналогичен вызову метода join без аргументов, т.е. элементы разделяются запятой.
var str = 'ab', a = [1, 2, 3, 4]; alert(str + a); // ab1,2,3,4
Для отладочных целей можно во время разработки переопределять toString так, чтобы добавлялись квадратные скобки в начале и в конце массива, тогда будет легче просматривать вложенные массивы.
var a = [1, 2, ['a', 'b', 'c'], 3, 4]; alert(a); // 1,2,a,b,c,3,4 Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; alert(a); // [1, 2, [a, b, c], 3, 4]
Создание массива из строки
Для обратного преобразования строки в массив у строк есть метод split , аналогично join принимающий разделитель, по которому требуется разбить строку.
var str = '1-2-3-4'; alert(str.split('-')); // 1,2,3,4
Обратите внимание, что если вызвать split у пустой строки, то мы получим не пустой массив, а массив с одним элементом, равным пустой строке.
var a = ''.split(','); alert([a.length, a[0] == '']); // 1,true
