2013-09-21 63 views
1

我在Java中我找出如何在一个数组或对象项目进行排序这样的数据结构玩耍。我想要一些单词以特定的顺序,我可以使用Bufferedreader HashMap,ArrayList。我想要做的是在任何点读出第一行42后,如果某些行是空的(即,长度为0的字符串),则输出所发生之前的一个42行的行。如何也可以改变这种程序来读取在时间整个输入一个行,然后输出偶数行(从第一行,第0行),然后奇数lines..I张贴,我有这样的代码远。数据结构来分类

public static void doIt(BufferedReader r, PrintWriter w) throws IOException { 

    ArrayList<String> s= new ArrayList<String>(); 

    String line; 
    int n = 0; 
    while ((line = r.readLine()) != null) { 
     s.add(line); 
     n++; 
    } 
    Collections.sort(s); 

    Iterator<String> i = s.iterator(); 
    while (i.hasNext()) { 
     w.println(i.next()); 
    } 
} 


public static void main(String[] args) { 
    try { 
     BufferedReader r; 
     PrintWriter w; 
     if (args.length == 0) { 
      r = new BufferedReader(new InputStreamReader(System.in)); 
      w = new PrintWriter(System.out); 
     } else if (args.length == 1) { 
      r = new BufferedReader(new FileReader(args[0])); 
      w = new PrintWriter(System.out);     
     } else { 
      r = new BufferedReader(new FileReader(args[0])); 
      w = new PrintWriter(new FileWriter(args[1])); 
     } 
     long start = System.nanoTime(); 
     doIt(r, w); 
     w.flush(); 
     long stop = System.nanoTime(); 
     System.out.println("Execution time: " + 10e-9 * (stop-start)); 
    } catch (IOException e) { 
     System.err.println(e); 
     System.exit(-1); 
    } 
} 

回答

0

我不知道我正确理解你的问题,但我希望这可以帮助:

打印一个空行之前发生42线的线条,你可以只保留一个计数器,一旦你会发现与零长度,输出具有索引counter - 42行线(我有可能通过这里有一个错误的关闭)

 int n = 0; 
     while ((line = r.readLine()) != null) { 
      if (n > 42 && s.length == 0) 
       System.out.println(s[n-42]);    
      s.add(line); 
      n++; 
     } 

和打印偶数行第一那么奇怪的,你可以尝试阅读一次两行,将第一行保存为A rrayList,第二行变成另一个。

底,一个将具有奇数行和一个将具有偶数行。

和最后一个或多个音符,而不是使用这样的:

Iterator<String> i = s.iterator(); 
    while (i.hasNext()) { 
     w.println(i.next()); 
    } 

你可以简单地使用:

for(String line : s) 
    System.out.println(line)