Разделение строки, содержащей специальные символы, на отдельные символы - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу разобрать ввод пользователя по отдельным символам. Например, ввод

  • Hello! My name is x

Следует разделить на:

{"H", "e", "l", "l", "o", "!"," ", "M","y"....}

Обратите внимание, что я хочу сохранить пробелы.

Не могу понять, как это сделать, используя String.split . Я пытался найти регулярные выражения, которые могли бы сделать это, но все они отключены!

Это текущий код, я пытаюсь разбить строку, поступающую со сканера.

    public static List<String> getUserInput() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter a line of text: ");

        return Arrays.asList(scanner.next().split("")); 
}

Любая помощь приветствуется!

Ответы [ 5 ]

0 голосов
/ 06 сентября 2018

Мне любопытно, почему ты хочешь это сделать. Строки можно читать в основном как массивы с charAt(). Вы можете превратить строку в поток с помощью StringReader. Вы можете превратить строку в IntStream с помощью chars() или codePoints(). Или вы можете просто получить копию, если его внутренний символьный массив с toCharArray().

Относительно того, что вы сказали в комментариях о toCharArray() или .split() отключении, это не так. У вас должна быть ошибка где-то, пожалуйста, покажите нам ваш код.

   public static void main( String[] args ) {
      String test = "Hello! My name is x";
      char[] chars = test.toCharArray();
      System.out.println( Arrays.toString( chars ) );
   }

Это печатает всю строку для меня и не обрезается.

run:
[H, e, l, l, o, !,  , M, y,  , n, a, m, e,  , i, s,  , x]
BUILD SUCCESSFUL (total time: 0 seconds)

Обновление: Что касается вашего обновления, next() находит токены, которые по умолчанию обрезаются на пустом месте. Вы хотите nextLine().

    return Arrays.asList(scanner.next().split(""));

Изменить на:

    return Arrays.asList(scanner.nextLine().split(""));
0 голосов
/ 06 сентября 2018

Вы можете сделать это следующим образом:

String foo = "Hello! My name is x";

for(char c: foo.toCharArray()) {
    //do whatever you want here

    //for example
    System.out.print(c);
}

Надеюсь, это поможет.

0 голосов
/ 06 сентября 2018

попробуйте это:
String[] cs = s.split("");

0 голосов
/ 06 сентября 2018

Попробуйте слово сопоставления границ:

assertEquals(3, "a b".split("\\b").length)
0 голосов
/ 06 сентября 2018

Использование String.toCharArray

Это даст вам char[] вашей строки с сохранением пробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...