如何通过换行拆分字符串?

B. *_*ney 20 java android

我是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;
Run Code Online (Sandbox Code Playgroud)

result.getCoin读成:

alphabravocharlie
Run Code Online (Sandbox Code Playgroud)

我想在换行符处拆分字符串并将每个子字符串放入一个字符串数组中.这是我目前的代码:

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

这给了我一个输出:

"$.alpha
bravo
charlie some text"
Run Code Online (Sandbox Code Playgroud)

而不是我想要的输出:

"$.alpha some text, $.bravo some text, $.charlie some text"
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏

Raj*_*mar 48

您可以使用以下语句按换行符拆分字符串:

   String textStr[] = yourString.split("\\r\\n|\\n|\\r");
Run Code Online (Sandbox Code Playgroud)

  • 这对于来自Mac的文本不起作用,其中行终止符是`\ r``. (12认同)

Ted*_*opp 19

这有点矫枉过正,但你可以使用标准的I/O类:

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(); // good form to close streams, but unnecessary for StringReader

// lines now contains all the strings between line breaks of any type
Run Code Online (Sandbox Code Playgroud)

这样做的好处是BufferedReader.readLine()具有检测各种线路终结器的所有逻辑.

从Java 8开始,BufferedReader有一个lines()方法,所以有一个更简单的方法(谢谢,@ jaco0646):

List<String> lines = new BufferedReader(new StringReader(result))
                         .lines()
                         .collect(Collectors.toList();
Run Code Online (Sandbox Code Playgroud)

或者,如果需要一个数组:

String[] lines = new BufferedReader(new StringReader(result))
                     .lines()
                     .toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)


sna*_*tor 5

使用Apache Commons帮助器类StringUtils。

平台独立方式:

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

平台依赖的方式。也许某些CPU周期更快。但是我不希望这有关系。

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