如何通过换行拆分string?

我是android开发的noobot,我试图通过多个换行符多次拆分string。 我试图分裂的string是从数据库查询中拉出,并像这样构造:

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,并将每个子string放入一个string数组中。 这是我现在的代码:

 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" 

任何帮助是极大的赞赏

Solutions Collecting From Web of "如何通过换行拆分string?"

您可以使用以下语句通过换行分隔string:

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

这有点矫枉过正,但你可以使用标准的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(); // lines now contains all the strings between line breaks 

这样做的好处是, BufferedReader.readLine()具有检测各种行结束符的所有逻辑。

使用Apache commons helper类的StringUtils。

平台独立的方式:

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

平台依赖的方式。 也许一些CPU周期更快。 但我不希望这件事。

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

如果可能,我会build议使用Guava Splitter和Joiner类,而不是String.split。 但是即使如此,确保在声明它们时正确地转义正则expression式也是非常重要的。 我不确定“\ n”在Java中不能被正则expression式编译器正确解释,但是我不确定它会是什么。

涵盖所有可能的行结束是棘手的,因为连续的EOL标记可能会混淆你的匹配。 我会build议

 String [] separated = result.replaceAll("\\r", "").split("\\n"); 
 Matcher m = Pattern.compile("(^.+$)+", Pattern.MULTILINE).matcher(fieldContents); while (m.find()) { System.out.println("whole group " + m.group()) } 

我build议下面的片段,这是兼容PC和Mac endline样式。

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