Android - разбить на разрыв строки в строке?(Пункты) - PullRequest
3 голосов
/ 13 марта 2012

В настоящее время я получаю некоторую информацию из текстового файла (.txt), который содержит несколько абзацев. Когда я извлекаю строку из текстового файла, я хочу разделить ее так, чтобы каждый абзац находился в объекте строки.

Вот текст, который я получаю из текстового файла: http://www.carlowweather.com/plaintext.txt

Я пытался разделить строку, используя разрывы строк и возврат каретки, но ни один из них не работает, см. Мой код ниже:

 int pCount=0;
public void parseData(String data){
    String regex = "(\\n)";
    String split[] = data.split(regex);
    for(int i = 0; i<split.length; i++){ 
        Log.e("e", pCount + " " + split[i]);
        pCount ++;
    }
}

Я также пробовал "\ r" и различные комбинации, которые я нашел при поиске в сети, но, похоже, ни одна из них не работает на Android с этим текстовым файлом. Я предполагаю, что файл не содержит разрывов строк или возврата каретки? Но только пустые строки?

Каков наилучший способ разбить абзацы на объекты String?

Ответы [ 4 ]

4 голосов
/ 13 марта 2012

Я думаю, что самый простой способ сделать это с помощью сканера .

Scanner sc = new Scanner(new File("donal.txt"), "UTF-8");
sc.useDelimiter("\n[ \t]*\n");

List<String> result = new ArrayList<String>();
int lineCount = 0;
while (sc.hasNext())
{
  String line = sc.next();
  System.out.printf("%n%d:%n%s%n", ++lineCount, line);
  result.add(line);
}
System.out.printf("%n%d paragraphs found.%n", lineCount);

Первый и последний абзацы фактически будут верхним и нижним колонтитулом; Я не знаю, что ты хочешь с этим делать.

Для удобства чтения я предполагаю, что разделителем строк всегда является \n в стиле Unix, но для безопасности вы должны учитывать \r\n в стиле Windows * и более старый * в стиле Mac \r. Что ж. Это сделало бы регулярное выражение:

"(?:\r\n|[\r\n])[ \t]*(?:\r\n|[\r\n])
2 голосов
/ 13 марта 2012

Код ниже расскажет вам, где существует новый разрыв абзаца. После этого вам предстоит разобраться с этим. Он просто ищет строки только с "". Это характеристика файла, на который вы ссылались. Я включил процесс, используемый для чтения файла, в приведенный ниже пример кода, поскольку вы не указали это в исходном вопросе. Одна мысль у меня была, что вы читали файл построчно, а затем пытались выполнить regEx для каждой строки. Я бы предположил, что предыдущие предложения будут работать, если вы прочитаете весь текстовый файл в одну строку.

Также вы можете разбить код ниже на другую функцию.

        try {
        BufferedReader in = new BufferedReader(new FileReader("plaintext.txt"));
        String inputDataLine;
        while ((inputDataLine = in.readLine()) != null) {
            if (!(inputDataLine.contentEquals(" "))) {
                System.out.println("What you want to do with a paragraph line");
            } else {
                System.out.println("What you want to do with a paragraph seperator");
            }
        }
        in.close();
    } catch (IOException e) {
    }
2 голосов
/ 13 марта 2012

Думаю, проблема в том, что между абзацами есть несколько разных символов (пробелы, новые строки и возврат каретки). Попробуйте это:

int pCount=0;
public void parseData(String data){
    String regex = "([ \\t\\r]*\\n[ \\t\\r]*)+"; // Only this line is changed.
    String split[] = data.split(regex);
    for(int i = 0; i<split.length; i++){ 
        Log.e("e", pCount + " " + split[i]);
        pCount ++;
    }
}
1 голос
/ 13 марта 2012

Я не могу попробовать это в Java прямо сейчас, но кажется, что исходный файл имеет пустое место в начале каждой строки (включая пустые) и комбинацию <cr><lf> для перехода к следующей строке. Стандартное регулярное выражение для соответствия появлению такой пустой строки, находящейся на безопасной стороне относительно пустого пространства, (кавычки для определения строки Java):

"^ *$"

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