2011-09-08 18 views
0

文字列の各行を取得する方法、それぞれ100と言うと、文字列内の行が '\ n'で区切られていると思います。Java:文字列から各n番目の行を取得する方法

これはおそらく簡単なことですが、私は本当にそれを行う方法を考えることができないので、誰も解決策を持っていますか?

ありがとう、 アレックス。

更新日: 申し訳ありません申し訳ありませんが、私の質問は非常にうまく説明できませんでした。

基本的に350行のファイルがあるとします。私は各100行のチャンクの開始と終了をつかみたい。各ラインをふりする10文字の長さで、私はこのような2つの別々の配列(開始および終了インデックスを含む)で終了したい:

(ライン0-100)0-1000

(ライン100-私は混乱したい場合は200)1000から2000

(ライン200-300)2000-3000

(ライン300-350)3000から3500

は、それでは周りと言います100行目の2番目のセット(100-200)私はそれらのための領域を持っています。

答えて

1

1つの方法は、文字列からStringReaderを作成し、BufferedReaderにラップし、それを使用して行を読み取ります。また、あなただけの行を取得するために\nに分割することができ、もちろん...

String[] allLines = text.split("\n"); 
List<String> selectedLines = new ArrayList<String>(); 

for (int i = 0; i < allLines.length; i += 100) 
{ 
    selectedLines.add(allLines[i]); 
} 

これはBufferedReaderを使用するよりもシンプルなコードですが、それは完全なスプリットメモリ内の文字列(同様に持つ意味はオリジナル、少なくとも一時的に、もちろん)。また、ファイルなどの他のソースから行を読み込むことにも柔軟性がありません。しかし、それが必要なのであれば、それはかなり簡単です。

編集:開始インデックスも必要な場合は、少しもっと複雑になりますが、それほど悪くはありません。おそらく、単一のクラスにカプセル化し、「スタートライン」にしたいが、簡潔にするために:

開始インデックスとラインを与えもちろん
String[] allLines = text.split("\n"); 
List<String> selectedLines = new ArrayList<String>(); 
List<Integer> selectedIndexes = new ArrayList<Integer>(); 

int index = 0; 
for (int i = 0; i < allLines.length; i++) 
{ 
    if (i % 100 == 0) 
    { 
     selectedLines.add(allLines[i]); 
     selectedIndexes.add(index); 
    } 
    index += allLines[i].length + 1; // Add 1 for the trailing "\n" 
} 

は、あなただけ追加して終了インデックスを取得することができます行の長さ:)

+1

私は質問でこれを入れていなかったが、各100行の開始インデックスと終了インデックスを取得することは可能でしょうか? – AlexPriceAP

+0

@AlexPriceAp:もちろん - あなたはどこでそれをしたいですか?別のArrayListsにそれらを入れます... –

+0

別のArrayListは問題ありません。私が開始と終了を望む理由は、私が開発しているSyntaxHighlighterの境界として使うことができるので、私はモバイルデバイス用に開発しているので、毎回100行を強調表示することができます。大きなファイルで! – AlexPriceAP

2

あなたはsplit()を使用して配列に文字列を分割して、ちょうどそのように、あなたがしたいのインデックスを取得することができます:textをs

String[] strings = myString.split("\n"); 
int nth = 100; 
for(int i = nth; i < strings.length; i + nth) { 
    System.out.println(strings[i]); 
} 
1
String newLine = System.getProperty("line.separator"); 
String lines[] = text.split(newLine); 

あなたの全体のテキストを持っていきなさい。今

nth行を取得するには、例えばを行う:

申し訳
System.out.println(lines[nth - 1]); // Minus one, because arrays in Java are zero-indexed 
関連する問題