Как использовать useDelimiter () один раз?

У меня есть например код

 String input = "1 fish 2 fish red fish blue fish";  
 Scanner s = new Scanner(input).useDelimiter("fish");

Выход:

1 
2
red
blue

Ожидаемый результат:

1 
2
fish
red
fish
blue
fish

используя тот же useDelimiter без нарушения

Ваш код ничего не выводит, но, очевидно, вам просто нужно изменить разделитель после чтения необходимого количества данных.

Voo 26.10.2018 07:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
116
4

Ответы 4

Вы можете сначала удалить это первое вхождение, а затем разделить его пробелами, если хотите, чтобы результат replaceFirst (регулярное выражение строки, замена строки), а затем выполнить разделение.

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input.replaceFirst(" fish", "")).useDelimiter(" ");

Я нашел replaceFirst из другого вопроса о SO

Вопрос как использовать useDelimiter () один раз?

Scary Wombat 26.10.2018 08:16

И OP, вероятно, не знает, что он может использовать replaceFirst, так зачем вам давать худший ответ, если он может быть проще и лучше?

Živjo Doberdan 26.10.2018 08:24

Возможно, OP должен использовать его, как он описал, если вы не уверены, почему бы не написать ему комментарий с просьбой предоставить дополнительную информацию. ИМО, я бы просто разделил строку, и если бы arr[1] был "fish", то выбросил бы его, но OP не об этом просил.

Scary Wombat 26.10.2018 08:28

У меня нет 50 представителей, поэтому я не могу дать ему комментарий. Я бы так и поступил иначе, это мое плохо, я не упомянул об этом в ответе.

Živjo Doberdan 26.10.2018 08:30

ну, вы могли бы подстраховаться и вложить обе идеи в свой ответ

Scary Wombat 26.10.2018 08:31

Вы можете сбросить разделитель с помощью s.useDelimiter(" ") после первых двух использований.

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input).useDelimiter("\\bfish\\b");

System.out.println(s.next()); // first use
System.out.println(s.next()); // second use
s.useDelimiter(" ");          // setting delimiter to <space>
// print the rest 

Извините не заметил //First Use

Scary Wombat 26.10.2018 08:19

Я обнаружил, что вторым элементом был " 2", поэтому я использовал "fish " в качестве разделителя.

Scary Wombat 26.10.2018 08:30
String input = "1 fish 2 fish red fish blue fish";
Scanner scanner = new Scanner(input).useDelimiter("fish");
System.out.print(scanner.next() + scanner.next());
scanner.useDelimiter(" ");
while (scanner.hasNext()){
        System.out.print(scanner.next() + " ");
}

Вопрос как использовать useDelimiter () один раз?

Scary Wombat 26.10.2018 08:16

Вы собираетесь выполнить двойное чтение, если разделитель - "рыба"

String input = "1 fish 2 fish red fish blue fish"; 
String delim = "fish ";
Scanner s = new Scanner(input).useDelimiter(delim);

while (s.hasNext ()) {
    System.out.println(s.next());
    if (delim.equals("fish ") && s.hasNext())
        System.out.println(s.next());
    delim = " ";
    s.useDelimiter(delim);
}

выход

1 
2 
fish
red
fish
blue
fish

В ответ на ваш комментарий. В этом случае я думаю, вам лучше использовать String::split. Если строки в результирующем массиве начинаются с рыбы, выбросьте ее / игнорируйте.

String input = "1 2 3 fish1 1 2 3 fish2 1 2 3 fish3 1 2 3 fish1 1 2 3 fish2 1 2 3";
String [] arr = inpit.split (" ");

for (String el : arr) {
    if (el.startsWith("fish")) continue;
    System.out.println (el);
} 

что, если бы исходная строка была такой? Строка input = "1 2 3 fish1 1 2 3 fish2 1 2 3 fish3 1 2 3 fish1 1 2 3 fish2 1 2 3 ......"; Я хочу хранить данные между всей строкой рыбы, например, я хочу сохранить 1 2 3 как строку между fish1 и fish2. Я мог добиться этого с помощью useDelimiter (). когда я пытаюсь использовать usedelimiter для fish1 во второй раз, данные не читаются. это моя главная забота

c.r 26.10.2018 19:19

В этом случае я думаю, вам лучше использовать String::split. Если строки в результирующем массиве начинаются с fish, выбросьте его / игнорируйте. См. Мой отредактированный ответ

Scary Wombat 29.10.2018 00:58

Другие вопросы по теме