Java split方法,用于在读取文件时输出彼此下面的值

Java split方法,用于在读取文件时输出彼此下面的值,java,arrays,string,split,line,Java,Arrays,String,Split,Line,我的代码运行良好,但是它并排打印值,而不是逐行打印。像这样: iatadult,DDD, iatfirst,AAA,BBB,CCC 我已经对stackoverflow进行了认真的搜索,但我的解决方案似乎都不起作用。我知道我必须在循环过程中做出改变。然而,我所看到的例子都不起作用。任何进一步的理解或技巧,以实现我的目标将是有益的。我缺少的东西可能很小。请帮忙 String folderPath1 = "C:\\PayrollSync\\client\\client_orginal.txt";

我的代码运行良好,但是它并排打印值,而不是逐行打印。像这样:

iatadult,DDD,

iatfirst,AAA,BBB,CCC
我已经对stackoverflow进行了认真的搜索,但我的解决方案似乎都不起作用。我知道我必须在循环过程中做出改变。然而,我所看到的例子都不起作用。任何进一步的理解或技巧,以实现我的目标将是有益的。我缺少的东西可能很小。请帮忙

String folderPath1 = "C:\\PayrollSync\\client\\client_orginal.txt";
File file = new File (folderPath1);
ArrayList<String> fileContents = new ArrayList<>(); // holds all matching client names in array

try {
    BufferedReader reader = new BufferedReader(new FileReader(file));// reads entire file
    String line;

    while (( line = reader.readLine()) != null) { 
        if(line.contains("fooa")||line.contains("foob")){
            fileContents.add(line);
        }
        //---------------------------------------
    }
    reader.close();// close reader
} catch (Exception e) {
    System.out.println(e.getMessage());
}

System.out.println(fileContents);
String folderPath1=“C:\\PayrollSync\\client\\client\u original.txt”;
文件文件=新文件(folderPath1);
ArrayList fileContents=新建ArrayList();//保存数组中所有匹配的客户端名称
试一试{
BufferedReader=new BufferedReader(new FileReader(file));//读取整个文件
弦线;
而((line=reader.readLine())!=null){
if(line.contains(“fooa”)| | line.contains(“foob”)){
fileContents.add(行);
}
//---------------------------------------
}
reader.close();//关闭读取器
}捕获(例外e){
System.out.println(e.getMessage());
}
System.out.println(文件内容);

在添加到
文件内容之前添加换行符


fileContents.add(行+“\n”)

在添加到
文件内容之前添加换行符


fileContents.add(行+“\n”)

添加新行的独立于平台的方式:


fileContents.add(line+System.lineSeparator)

添加新行的独立于平台的方式:


fileContents.add(line+System.lineSeparator)

通过在执行此操作时直接打印列表,您正在调用为列表覆盖的方法
toString()
,该方法打印如下内容:

obj1.toString(),obj2.toString() .. , objN.toString()
在您的例子中,
obj*
类型为
String
,而
toString()覆盖则返回字符串本身。这就是为什么会看到所有字符串都用逗号分隔

要做一些不同的事情,例如:在单独的一行中打印每个对象,您应该自己实现它,您只需在每个字符串后面附加新行字符(
'\n'

java 8中可能的解决方案:

String result = fileContents.stream().collect(Collectors.joining('\n'));
System.out.println(result);

通过在执行此操作时直接打印列表,可以调用列表的方法
toString()
覆盖,该方法打印如下内容:

obj1.toString(),obj2.toString() .. , objN.toString()
在您的例子中,
obj*
类型为
String
,而
toString()覆盖则返回字符串本身。这就是为什么会看到所有字符串都用逗号分隔

要做一些不同的事情,例如:在单独的一行中打印每个对象,您应该自己实现它,您只需在每个字符串后面附加新行字符(
'\n'

java 8中可能的解决方案:

String result = fileContents.stream().collect(Collectors.joining('\n'));
System.out.println(result);

下面是我的完整答案。谢谢你的帮助。我花了一整天的时间,但我有一个完整的解决方案

        File file = new File (folderPath1);
        ArrayList<String> fileContents = new ArrayList<>(); // holds all matching client names in array 

         try {
                BufferedReader reader = new BufferedReader(new FileReader(file));// reads entire file
                String line;

                while (( line = reader.readLine()) != null) { 
                     String [] names ={"iatdaily","iatrapala","iatfirst","wpolkrate","iatjohnson","iatvaleant"};
                           if (Stream.of(names).anyMatch(line.trim()::contains)) {
                               System.out.println(line);
                               fileContents.add(line + "\n");
                           }
                }
                 System.out.println("---------------");
                reader.close();// close reader
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
File File=新文件(folderPath1);
ArrayList fileContents=新建ArrayList();//保存数组中所有匹配的客户端名称
试一试{
BufferedReader=new BufferedReader(new FileReader(file));//读取整个文件
弦线;
而((line=reader.readLine())!=null){
字符串[]名称={“iatdaily”、“iatrapala”、“iatfirst”、“wpolkrate”、“iatjohnson”、“iatvaleant”};
if(Stream.of(names).anyMatch(line.trim()::contains)){
系统输出打印项次(行);
fileContents.add(第+行“\n”);
}
}
System.out.println(“--------------”;
reader.close();//关闭读取器
}捕获(例外e){
System.out.println(e.getMessage());
}

下面是我的完整答案。谢谢你的帮助。我花了一整天的时间,但我有一个完整的解决方案

        File file = new File (folderPath1);
        ArrayList<String> fileContents = new ArrayList<>(); // holds all matching client names in array 

         try {
                BufferedReader reader = new BufferedReader(new FileReader(file));// reads entire file
                String line;

                while (( line = reader.readLine()) != null) { 
                     String [] names ={"iatdaily","iatrapala","iatfirst","wpolkrate","iatjohnson","iatvaleant"};
                           if (Stream.of(names).anyMatch(line.trim()::contains)) {
                               System.out.println(line);
                               fileContents.add(line + "\n");
                           }
                }
                 System.out.println("---------------");
                reader.close();// close reader
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
File File=新文件(folderPath1);
ArrayList fileContents=新建ArrayList();//保存数组中所有匹配的客户端名称
试一试{
BufferedReader=new BufferedReader(new FileReader(file));//读取整个文件
弦线;
而((line=reader.readLine())!=null){
字符串[]名称={“iatdaily”、“iatrapala”、“iatfirst”、“wpolkrate”、“iatjohnson”、“iatvaleant”};
if(Stream.of(names).anyMatch(line.trim()::contains)){
系统输出打印项次(行);
fileContents.add(第+行“\n”);
}
}
System.out.println(“--------------”;
reader.close();//关闭读取器
}捕获(例外e){
System.out.println(e.getMessage());
}

有效,但我将此输出放在彼此下面,但第二行有一个逗号(,)。您可以发布输入文件的该部分吗?有效,但我将此输出放在彼此下面,但第二行有一个逗号(,)。您可以发布输入文件的该部分吗?Java 8:
fileContents.forEach(System.out::println);
Java8:
fileContents.forEach(System.out::println)
这里是否有一些用于循环文件内容的附加代码。它闪现了。其他答案在代码中也解释了相同的问题。我还添加了关于为什么您看到您看到的内容的解释。我添加了java 8示例。我更喜欢这个示例。谢谢。很高兴看到各种方法。问题我想存储字符串我希望在字符串数组中与while循环进行比较。我尝试将字符串数组与while循环一起使用,但它不起作用。我希望这样做,这样我就不必为每个str继续写入.contains(“字符串”)