#java
Вопрос:
public class StringDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String name = "String";
char[] c = name.toCharArray();
for (char ch : c) {
System.out.print(ch);
System.out.print(",");
}
}
}
Это дает мне вывод в виде
S,t,r,i,n,g,
Мне не нужна эта последняя запятая, как получить вывод в виде S,t,r,i,n,g
Ответ №1:
Вы также можете сделать это на более высоком уровне, не создавая свой собственный цикл. Это не быстрее или что-то в этом роде, но код более четко объясняет, что он делает: «Разделите мою строку на символы и соедините ее вместе, разделив запятыми!» …
String name = "String";
String separated = String.join(",", name.split(""));
System.out.println(separated);
ИЗМЕНИТЬ: String.join()
доступно с Java 1.8 и выше.
Ответ №2:
Я бы лично использовал a StringBuilder
для этой задачи.
Что вам нужно, так это применить некоторую логику, которая может определить, нужна запятая или нет. Вы перебираете символы так же, как и раньше, и всегда добавляете запятую перед следующим символом, за исключением первой итерации.
Пример:
public static void main(String[] args) {
String test = "String";
StringBuilder sb = new StringBuilder();
for (char ch : test.toCharArray()) {
if (sb.length() != 0) {
sb.append(",");
}
sb.append(ch);
}
System.out.println(sb.toString());
}
Выход:
S,t,r,i,n,g
Другой способ без StringBuilder
и с использованием только традиционного цикла for, но с использованием той же логики:
public static void main(String[] args) {
String test = "String";
char[] chars = test.toCharArray();
for (int i = 0; i < chars.length; i ) {
if (i != 0) {
System.out.print(",");
}
System.out.print(chars[i]);
}
}
Выход:
S,t,r,i,n,g
Ответ №3:
Конечно, но для этого вам нужен for
цикл, основанный на длине c, другие решения не такие прямые, ИМХО:
String name="String";
char[] c = name.toCharArray();
for (int i = 0; i < c.length; i ){
char ch = c[i];
System.out.print(ch);
if( i != c.length -1 ){
System.out.print(",");
}
}
Ответ №4:
Некоторые дополнительные 2 цента:
Вы можете передавать значения символов int
потоком, сопоставлять их с List<String>
тем, где каждый элемент представляет собой один char
as String
, и, наконец, использовать String.join(..., ...)
для получения желаемого результата запятую, разделяющую String
все символы в оригинале String
:
public static void main(String[] args) {
// take an example String
String name = "Stringchars";
// make a list of characters as String of it by streaming the chars
List<String> nameCharsAsString = name.chars()
// mapping each one to a String
.mapToObj(e -> String.valueOf((char) e))
// and collect them in a list
.collect(Collectors.toList());
// then join the elements of that list to a comma separated String
String nameCharsCommaSeparated = String.join(",", nameCharsAsString);
// and print it
System.out.println(nameCharsCommaSeparated);
}
Выполнение этого кода приводит к следующему результату:
S,t,r,i,n,g,c,h,a,r,s
Это всего лишь еще одна возможность получить желаемый результат, это не обязательно лучшее решение.
Комментарии:
1. Я чувствую, что это довольно накладные расходы для простого разделения строки. Мало того, что он создает промежуточную коллекцию, но и код может быть намного более читаемым, просто выполнив
name.split("");
это (что возвращает массив строк, в который вы можете перейтиString.join()
тем же способом).2. Да, вы совершенно правы. Я на самом деле поддержал ответ, в котором используется
String.join()
иname.split()
, потому что это просто проще. Я оставлю этот ответ и комментарий для будущих читателей, не ожидающих никаких отзывов 😉
Ответ №5:
Вы можете использовать Stream
это для этого. Пожалуйста, проверьте ниже,
String result = Arrays.stream(name.split("")).collect(Collectors.joining(","));
Выход:
S,t,r,i,n,g