Подтвердить что ты не робот

Как разделить строку по перерыву?

Я создаю noob для разработки Android, и я пытаюсь разбить строку несколько раз на несколько разрывов строк. строка, которую я пытаюсь разбить, извлекается из запроса базы данных и создается следующим образом:

public String getCoin() {
    // TODO Auto-generated method stub
    String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_QUANTITY, KEY_OUNCES, KEY_VALUE };
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
    String result = "";

    int iRow = c.getColumnIndex(KEY_ROWID);
    int iName = c.getColumnIndex(KEY_NAME);
    int iQuantity = c.getColumnIndex(KEY_QUANTITY);
    int iOunces = c.getColumnIndex(KEY_OUNCES);
    int iValue = c.getColumnIndex(KEY_VALUE);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        result = result + /*c.getString(iRow) + " " +*/ c.getString(iName).substring(0, Math.min(18, c.getString(iName).length())) + "\n";
    }
    c.close();
    return result;

result.getCoin читается следующим образом:

alphabravocharlie

Я хочу разбить строку на разрыв строки и поместить каждую подстроку в String Array. Это мой текущий код:

String[] separated = result.split("\n");
      for (int i = 0; i < separated.length; i++) {
           chartnames.add("$." + separated[i] + " some text" ); 
           }

Это дает мне вывод:

"$.alpha
bravo
charlie some text"

вместо моего желаемого вывода:

"$.alpha some text, $.bravo some text, $.charlie some text"

Любая помощь приветствуется

4b9b3361

Ответ 1

вы можете разделить строку на разрыв строки, используя следующую инструкцию:

   String textStr[] = yourString.split("\\r\\n|\\n|\\r");

Ответ 2

Это немного перебор, но вы можете использовать стандартные классы ввода-вывода:

BufferedReader rdr = new BufferedReader(new StringReader(result));
List<String> lines = new ArrayList<String>();
for (String line = rdr.readLine(); line != null; line = rdr.readLine()) {
    lines.add(line);
}
rdr.close();
// lines now contains all the strings between line breaks

Преимущество этого заключается в том, что BufferedReader.readLine() имеет всю логику, разработанную для обнаружения всех видов терминаторов линий.

Ответ 3

Использование вспомогательного класса Apache для класса StringUtils.

Независимый от платформы способ:

String[] lines = StringUtils.split(string, "\r\n");

Зависит от платформы. Возможно, некоторые процессоры работают быстрее. Но я не ожидал, что это будет иметь значение.

String[] lines = StringUtils.split(string, System.lineSeparator());

Ответ 4

Если возможно, я бы предложил использовать классы с разделителями и кластерами Guava, предпочитая String.split. Но даже тогда важно убедиться, что вы правильно избегаете своих регулярных выражений при их объявлении. Я не уверен, что \n "не будет правильно интерпретироваться компилятором regex в Java, но я не уверен, что это будет.

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

String [] separated = result.replaceAll("\\r", "").split("\\n");

Ответ 5

Matcher m = Pattern.compile("(^.+$)+", Pattern.MULTILINE).matcher(fieldContents);

while (m.find()) {
    System.out.println("whole group " + m.group())
}

Ответ 6

Я предлагаю следующий фрагмент, который совместим с типами конечных элементов ПК и Mac.

String [] separated = result.replaceAll("\\r", "\\n")
   .replaceAll("\\n{2,}", "\\n")
   .split("\\n");