Разделение строки в Java - PullRequest
5 голосов
/ 03 марта 2012

Может кто-нибудь посоветовать проблему, которая меня беспокоила?У меня есть файл Java .jar, который возвращает строку из метода, составленного следующим образом:

integer integer integer block_of_text

Это три целых числа, которые могут быть положительными или отрицательными, каждый из которых разделен пробелами, а затем еще один пробел передблок текста, который может состоять из любых символов, но не должен содержать возврат каретки.Теперь я предполагаю, что могу прочитать подстроку до пробела для каждого из начальных целых чисел, а затем просто прочитать оставшийся текст за один раз.

Я должен добавить, что текстовый блок нельзя разбивать независимо от того, что он содержит.

Но может ли кто-нибудь предложить лучшую альтернативу?

Спасибо респондентам.Это спасло меня от головной боли!

Ответы [ 4 ]

11 голосов
/ 03 марта 2012

Вы можете использовать форму String#split(regex,limit), которая принимает ограничение :

String s = "123 456 789 The rest of the string";
String ss[] = s.split(" ", 4);
// ss = {"123", "456", "789", "The rest of the string"};
7 голосов
/ 03 марта 2012

Вы можете использовать String.split с пробелом в качестве разделителя и установить ограничение 4:

String[] result = s.split(" ", 4);

Вы также можете использовать Scanner. Это не только разделит текст, но и проанализирует целые числа до int. В зависимости от того, нужны ли вам три целых числа как int или String, это может оказаться более удобным:

Scanner scanner = new Scanner(s);
int value1 = scanner.nextInt();
int value2 = scanner.nextInt();
int value3 = scanner.nextInt();
scanner.skip(" ");
String text = scanner.nextLine();

Посмотрите, как он работает в сети: ideone .

3 голосов
/ 03 марта 2012

Один простой способ (так как вы сказали, что в block_of_text не будет новых строк), это использовать Сканер . Это инструмент для разбиения ввода на основе определенного разделителя и возврата соответствующих типов обратно к вам. Например, вы можете использовать методы hasNextInt() и nextInt(), чтобы проверить целое число на входе и фактически извлечь его из потока.

Например:

Scanner scanner = new Scanner(System.in); // Arg could be a String, another InputStream, etc
int[] values = new int[3];
values[0] = scanner.nextInt();
values[1] = scanner.nextInt();
...
String description = scanner.nextLine();

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

Вот более подробная информация о том, как использовать Scanner: Если ... не является целым {

0 голосов
/ 04 марта 2012

Самый простой способ разбить строку - использовать метод split.

String gen = "some texts here";
String spt[] = gen.split(" ");  //This will split the string gen around the spaces and stores them into the given string array


Чтобы убрать целые числа по вашему вопросу, начните индекс массива с 3.
Я надеюсь, что это поможет.

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