25

私はアンドロイド開発の初心者で、文字列を複数の改行で複数回分割しようとしています。分割しようとしている文字列は、データベース クエリから取得され、次のように構成されます。

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[] 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"

どんな助けでも大歓迎です

4

6 に答える 6

58

次のステートメントを使用して、改行で文字列を分割できます。

   String textStr[] = yourString.split("\\r\\n|\\n|\\r");
于 2012-11-20T00:46:14.060 に答える
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

これの利点は、BufferedReader.readLine()あらゆる種類の行末記号を検出するためのすべてのロジックが機能することです。

Java 8 にBufferedReaderlines()メソッドがあるため、もっと簡単な方法があります (@jaco0646 に感謝):

List<String> lines = new BufferedReader(new StringReader(result))
                         .lines()
                         .collect(Collectors.toList();

または、代わりに配列が必要な場合:

String[] lines = new BufferedReader(new StringReader(result))
                     .lines()
                     .toArray(String[]::new);
于 2012-11-20T00:51:08.817 に答える
5

Apache Commons ヘルパー クラス StringUtils を使用します。

プラットフォームに依存しない方法:

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

プラットフォームに依存する方法。たぶん、いくつかの CPU サイクルが速くなります。しかし、私はそれが問題になるとは思っていません。

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

于 2015-11-06T20:21:16.800 に答える
2

可能であれば、String.split よりも Guava Splitter クラスと Joiner クラスを使用することをお勧めします。ただし、その場合でも、正規表現を宣言するときに正規表現を適切にエスケープしていることを確認することが重要です。「\n」がJavaの正規表現コンパイラによって適切に解釈されないかどうかはわかりませんが、どちらになるかはわかりません。

複数の連続する EOL マーカーが一致を台無しにする可能性があるため、考えられるすべての行末をカバーするのは注意が必要です。私は提案します

String [] separated = result.replaceAll("\\r", "").split("\\n");
于 2012-11-20T01:02:18.353 に答える
1
Matcher m = Pattern.compile("(^.+$)+", Pattern.MULTILINE).matcher(fieldContents);

while (m.find()) {
    System.out.println("whole group " + m.group())
}
于 2015-02-18T08:45:44.247 に答える
0

次のスニペットを提案します。これは、PC と Mac の両方のエンドライン スタイルと互換性があります。

String [] separated = result.replaceAll("\\r", "\\n")
   .replaceAll("\\n{2,}", "\\n")
   .split("\\n");
于 2015-09-03T11:12:43.770 に答える