java - 为java中的每一行存储制表符分隔的TSV文件中的变量
问题描述
我尝试在 Java 中读取制表符分隔的 TSV 文件,并希望将每行的值存储在 2 个变量中。(变量名:制表符之前的所有内容,变量 2:制表符之后的所有内容)。该文件如下所示:
Name1 Lastname1 TAB directory1/subdir1/subdir11
Name2 SecondName2 Lastname2 TAB directory1/subdir2/subdir22
所以我有 1)姓名和姓氏,用空格分隔 2)制表符 3)没有空格的 url 4)新行(在最后一个 url 字符之后,以便下一个条目从新行开始)
我遵循了一个教程,而我已经拥有的是:
// Open TSV File
public static Scanner openFile(String path) {
try {
Scanner scan;
scan = new Scanner(new File(path));
System.out.println("TSV-File found");
return scan;
} catch (Exception e) {
System.out.println("TSV-File not found");
}
return null;
}
public static void readFile(Scanner scan) {
while(scan.hasNext()) {
String name = scan.next();
String url = scan.next();
System.out.printf("%s %s\n", name, url);
}
}
问题出在我的 readFile() 方法中,因为我不知道如何说“在制表符之前获取所有内容并将其存储到变量名”和“将所有内容从制表符获取到新行并将其存储到变量 url”。
谢谢和问候,帕特里克
解决方案
String::split
我不知道怎么说“在制表符之前获取所有内容并将其存储到变量名”和“将所有内容从制表符获取到新行并将其存储到变量 url”。
使用该String::split
方法将字符串切成更小的字符串。指定每行字段之间使用的分隔符 ( TAB )。你得到一个对象数组,String
每个字段对应一个对象。
String[] fields = line.split( "\t" ) ; // Chop string into smaller strings.
String name = fields[ 0 ] ; // Annoying zero-based index counting.
String url = fields[ 1 ] ;
您应该添加一些代码来验证您在数组大小中获得了预期的字段数。
提示:使用库来执行读取和写入制表符分隔文件的繁琐工作。我使用Apache Commons CSV库来完成此类工作。它处理各种CSV格式以及制表符分隔。在 Stack Overflow 中搜索示例,例如我昨天发布的示例。在该示例代码中,将 更改CSVFormat.RFC4180
为CSVFormat.TDF
制表符分隔格式。
推荐阅读
- python - 在数据透视表中 - 我如何在列中添加维度(除了维度行)?
- javascript - 在其他组件渲染后保存复选框 UI
- java - Selenium java 文件下载无法在 Chrome 版本 75 上运行
- sql-server - 如何通过命令提示符更改 SQL Server 协议
- hadoop - 在 AWS EMR 上安装 Druid
- excel-formula - 确定一个日期为星期四并总结过去 6 天
- java - SendKeys 发送的密钥比预期的多
- sql - 如何解决存储过程中的性能问题?
- primefaces - PrimeFaces 计划在某些 SlotDuration 配置下不会一直显示
- c# - 如何查找用户基于 2 个时间间隔将行插入数据库的频率(每周、每月)