У меня есть например код
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 без нарушения
Вы можете сначала удалить это первое вхождение, а затем разделить его пробелами, если хотите, чтобы результат replaceFirst (регулярное выражение строки, замена строки), а затем выполнить разделение.
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input.replaceFirst(" fish", "")).useDelimiter(" ");
Я нашел replaceFirst из другого вопроса о SO
Вопрос как использовать useDelimiter () один раз?
И OP, вероятно, не знает, что он может использовать replaceFirst, так зачем вам давать худший ответ, если он может быть проще и лучше?
Возможно, OP должен использовать его, как он описал, если вы не уверены, почему бы не написать ему комментарий с просьбой предоставить дополнительную информацию. ИМО, я бы просто разделил строку, и если бы arr[1]
был "fish"
, то выбросил бы его, но OP не об этом просил.
У меня нет 50 представителей, поэтому я не могу дать ему комментарий. Я бы так и поступил иначе, это мое плохо, я не упомянул об этом в ответе.
ну, вы могли бы подстраховаться и вложить обе идеи в свой ответ
Вы можете сбросить разделитель с помощью 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
Я обнаружил, что вторым элементом был " 2"
, поэтому я использовал "fish "
в качестве разделителя.
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 () один раз?
Вы собираетесь выполнить двойное чтение, если разделитель - "рыба"
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 во второй раз, данные не читаются. это моя главная забота
В этом случае я думаю, вам лучше использовать String::split
. Если строки в результирующем массиве начинаются с fish
, выбросьте его / игнорируйте. См. Мой отредактированный ответ
Ваш код ничего не выводит, но, очевидно, вам просто нужно изменить разделитель после чтения необходимого количества данных.