Как преобразовать заданную строку в символы, разделенные запятыми, в java?

#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