java - 具有多个分隔符的拆分和扫描仪
问题描述
我正在尝试创建一个带有分隔符的扫描仪,该分隔符将解析文本文件中的行,然后使用此信息和 split() 方法创建数组。但是,我无法成功阻止 split() 方法应用拆分文本文件的下一行。
public class Main {
public static void main(String[] args) throws FileNotFoundException {
fileReader("test.txt");
}
public static void fileReader(String filename) throws FileNotFoundException {
Scanner in = new Scanner(new File(filename));
in.useDelimiter(",");
String[] test = in.next().split(":");
String[] test2 = in.next().split(":");
System.out.println(Arrays.toString(test));
System.out.println("\n" + Arrays.toString(test2));
}
}
测试.txt
A:B:C,ONE:TWO:THREE
ALPHA:BETA:CHARLIE,FOUR:FIVE:SIX
输出:
[A, B, C]
[ONE, TWO, THREE
ALPHA, BETA, CHARLIE, FOUR, FIVE, SIX]
预期输出:
[A, B, C] [ONE, TWO, THREE]
请注意,我最终将添加一个循环来解析整个文本文件,并使用其他行创建数组。
解决方案
代替
in.useDelimiter(",");
和
in.useDelimiter("[," + System.lineSeparator() + "]");
正则表达式[,c]
匹配方括号内的字符之一。因此,拆分将发生在此处指操作系统返回的行分隔符的任一位置,
或c
位置。c
请注意,不同的操作系统可能会返回不同的行分隔符,因此最好使用System.lineSeparator()
而不是自己指定行分隔符。如果您想自己指定行分隔符,您可以指定[,\n\r]
,但我强烈建议您使用System.lineSeparator()
而不是[\n\r]
.
推荐阅读
- c# - Selenium C#:按标题获取元素
- django - Kubernetes中的定期数据库备份?
- cython - Cython:使用我来自
, 不能让它工作 - python - 使用 pygame 显示具有“for”结构的字母的问题在哪里
- json - JOLT 基于 key 变换元素
- kotlin - 当我从远程服务器提取数据时,我是否总是在挂起中添加 withContext(Dispatchers.IO)?
- php - 如何使用 $pdf 变量设置特定页面的位置?
- android - netflix 和其他服务如何允许预加载电影等
- google-bigquery - 错误 - 400 超出配额:您的表超出了每个表的导入或查询附加配额
- javascript - 遍历嵌套循环并删除与条件匹配的特定索引