当前位置: 首页 > 知识库问答 >
问题:

如何打印行直到行的第一个字母不同(使用扫描器或bufferedreader)?

汤乐家
2023-03-14
171142229
171142232
171142250
171142254
177073637

但还有很多,这只是一个例子,我必须找到我所有文件中的每个数字,文件的内容是这样的(不能改变这一点,还有很多,每一行都是以字母H或I开头的)

H   ZPDV    171 MO  ME  8500015847  8500015847  8500015847  8500015847  171142229   20160112    20160112    MXN 0000002978  
I   20  6CB 1               10.07   0   16  C2              9019999999171610099277  9019999999171610099277              
I   10  61  1               189.93  0   16  C2              9019999999171610099277  9019999999171610099277              
H   ZPDV    169 MO  ME  2000169 2000169 2000169 2000169 169068348   20160112    20160112    MXN 0000012213      
I   20  6CB 1               12.00   0   16  C2              7019999999169610019193  7019999999169610019193              
I   10  61  1               154.38  0   16  C2              7019999999169610019193  7019999999169610019193      

如果您注意到,第一个数字171142229位于开头有H的第一行。

我想打印所有开头有I的行,这些行位于带有h的行的下面,并在下一个h之前停止。

程序打印下面的所有行,不管是什么,直到文件结束,然后在文件列表中查找下一个数字,并执行相同的操作,依此类推。

public static void main(String[] args) throws IOException {
    String[] lista = CreaPVF.creaListaPendientes(); //this method creates my list of nubers
    String[] rutas = CreaPVF.recorreCarpeta();//this method has a list with the routes to my files
    for (int i = 0; i < lista.length; i++) { 
        int x = 0;
        while (x < rutas.length) {                
            try{
                String[] tmp;
                FileInputStream fis = new FileInputStream(rutas[x]);
                Scanner scanner = new Scanner(fis);
                String line=scanner.nextLine();
                do{                    
                    tmp=scanner.nextLine().split("\t");
                    if (lista[i].equals(tmp[9])) {
                        while(scanner.hasNextLine()){
                            do{                              
                                System.out.println(scanner.nextLine());
                            }while(tmp[0].equals("I"));
                        }
                    }

                }while(scanner.hasNext() ) ;      
                scanner.close();
            } catch (Exception e) {
            } finally {

            }
            x++;
        }

    }

}

共有1个答案

景辰钊
2023-03-14

变量line未使用,并且占用了Scanner.nextLine(),您实际上忽略了文件的第一行。

接下来,为了使循环正常工作,您需要将tmp的初始化移到循环之外。这样可以确保不跳过任何行。

最后,您需要在循环内部更新tmp,并在显示行之前检查它的起始字符。

            // extract the next line from the stream
            tmp=scanner.nextLine().split("\t");

            do{
                // check if our number is in that line
                if (lista[i].equals(tmp[9])) {
                    while(scanner.hasNextLine()){
                        do{
                            tmp=scanner.nextLine();
                            if(tmp[0].equals("I")) {
                                System.out.println(Arrays.toString(tmp));
                            }
                        }while(tmp[0].equals("I"));
                    }
                }

            }while(scanner.hasNext() ) ;
 类似资料:
  • 问题内容: 我想像这样打印进度条: 但是这些都应该打印到终端机的同一行,而不是新行。我的意思是,每个新行都应替换上一行,而不是使用而不是。 如何用Java做到这一点? 问题答案: 格式化字符串,如下所示: 注意字符。正是所谓的回车,会将光标移回行的开头。 最后,请确保你使用 并不是

  • 问题内容: 我想更改网页上的某些内容。我也想隐藏一些东西。打印时,有没有办法用CSS做到这一点?我尤其希望能够隐藏一些DIV及其包含的所有DIV。 问题答案: 可以使用单独的打印样式表来实现。该属性是关键:

  • 对不起,我的问题,但我是一个初学者。请你能支持与扫描仪相关的关心。 “背景”:我写了一些研究扫描仪的代码: 我有一个例外:找不到行。这就是我在输出中得到的结果: 任务:运行失败今天是哪一天?线程“main”java.util.NosuchelementException异常:在java.base/java.util.Scanner.NextLine(Scanner.java:1651)和demoo

  • 问题内容: 我有一个程序,告诉我它有多远。 因此,如果len(some_list)为50,我将最后一行打印50遍。我想打印一行并继续更新该行。我知道我知道这可能是您整天都会阅读的最棘手的问题。我只是想不通我需要输入到Google以获得答案的四个词。 更新!我尝试了mvds的建议,认为正确。新密码 完成百分比只是一个字符串(我是第一次尝试抽象,现在是抽象的)。现在的结果是,它运行该程序,直到程序结束

  • 我有一本这样的字典: 我需要打印第一行上打印的值列表中的所有第一项,第二行上打印的所有第二项,第三行上打印的所有第三项。像这样: 所有项目的字符长度相同,所有列表的项目数相同。 我有一个字母列表,可以按正确的顺序获取键,我只是不知道如何打印值。我可以打印所有第一个项目: 如何创建上面的输出?