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(“字符串”)