2011-09-08 50 views
0

我想知道如何从字符串中获取每个第n行,比方说每100行,字符串中的行用'\ n'分隔。Java:如何从字符串中获取每条第n行

这可能是一件简单的事情,但我真的无法想象如何去做,所以有人有解决方案吗?

非常感谢, Alex。

UPDATE: 对不起,我没有很好地解释我的问题。

基本上,假设有一个350行的文件。我想抓住每个100行块的开始和结束。假装每一行是10个字符长,我用2门独立的阵列(包含开始和结束索引)这样完成:

(系0-100)0-1000

(系100- 200)1000-2000

(系200-300)2000-3000

(系300-350)3000-3500

所以后来如果我想勾搭说第二组100行(100-200)我有他们的地区。

回答

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:当然 - 但你想要他们在哪里?目前将它们放入单独的ArrayList中... –

+0

单独的ArrayList很好。我想要开始和结束的原因是我可以将它们用作我正在开发的SyntaxHighlighter的边界,所以我可以突出显示每100(当前)行,因为我正在为移动设备开发,并且它可能会很慢与大文件! – AlexPriceAP

2

可以使用split(),然后就得到你想要的索引分割字符串到一个数组,像这样:

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); 

哪里text为s带上你的全文。

我们得到nth线,做例如: -

System.out.println(lines[nth - 1]); // Minus one, because arrays in Java are zero-indexed 
相关问题