Java: как извлечь каждую n-ю строку из строки - PullRequest
0 голосов
/ 09 сентября 2011

Мне интересно, как я мог бы взять каждую n-ю строку из строки, скажем, каждые 100, при этом строки в строке разделяются символом '\ n'.

Возможно, это простая вещь, но я действительно не могу придумать, как это сделать, так у кого-нибудь есть решение?

Большое спасибо, Алекс.

UPDATE: Извините, я не очень хорошо объяснил свой вопрос.

По сути, представьте, что есть файл из 350 строк. Я хочу получить начало и конец каждого 100-строчного блока. Притворяясь, что каждая строка длиной 10 символов, я бы закончил с двумя отдельными массивами (содержащими начальный и конечный индексы), как это:

(строки 0-100) 0-1000

(строки 100-200) 1000-2000

(строки 200-300) 2000-3000

(строки 300-350) 3000-3500

Итак, если я захочу возиться с, скажем, вторым набором из 100 строк (100-200), у меня есть для них регионы.

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Вы можете разбить строку на массив, используя split(), а затем просто получить нужные вам индексы, например:

String[] strings = myString.split("\n");
int nth = 100;
for(int i = nth; i < strings.length; i + nth) {
    System.out.println(strings[i]);
}
1 голос
/ 27 августа 2012
String newLine = System.getProperty("line.separator");
String lines[] = text.split(newLine);

Где text - строка со всем вашим текстом.

Теперь, чтобы получить nth строку, сделайте, например ::

System.out.println(lines[nth - 1]); // Minus one, because arrays in Java are zero-indexed
1 голос
/ 09 сентября 2011

Один из подходов - создать StringReader из строки, обернуть его в BufferedReader и использовать его для чтения строк. Кроме того, вы можете просто разделить на \n, чтобы получить строки, конечно ...

String[] allLines = text.split("\n");
List<String> selectedLines = new ArrayList<String>();

for (int i = 0; i < allLines.length; i += 100)
{
    selectedLines.add(allLines[i]);
}

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

РЕДАКТИРОВАТЬ: Если стартовые индексы тоже нужны, он становится немного более сложным ... но не так уж плохо. Возможно, вы хотите инкапсулировать «начало и конец» в одном классе, но для краткости:

String[] allLines = text.split("\n");
List<String> selectedLines = new ArrayList<String>();
List<Integer> selectedIndexes = new ArrayList<Integer>();

int index = 0;
for (int i = 0; i < allLines.length; i++)
{
    if (i % 100 == 0)
    {
        selectedLines.add(allLines[i]);
        selectedIndexes.add(index);
    }
    index += allLines[i].length + 1; // Add 1 for the trailing "\n"
}

Конечно, учитывая начальный индекс и строку, вы можете получить конечный индекс, просто добавив длину строки:)

...