读取一行文本文件,拆分为数组
Posted
技术标签:
【中文标题】读取一行文本文件,拆分为数组【英文标题】:Read one-line text file, split to array 【发布时间】:2012-11-29 06:29:52 【问题描述】:我正在从一个看起来像这样的文本文件中读取一长行信息:
Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\
应该是用户名的高分。当我打印出该行时,它看起来完全一样,但是当我使用split("\\\\")
后打印出数组时,它看起来像这样:
[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]
问题是Array[0]
很好,但Array[1]
是空的,Array[3]
、Array[5]
等也是如此。
这是我的代码。它有什么问题?
BufferedReader in = null;
try
in = new BufferedReader(new FileReader(path));
catch (FileNotFoundException e)
e.printStackTrace();
String line = null;
try
line = in.readLine();
catch (IOException e)
e.printStackTrace();
System.out.println("LINE = "+line);
String[] scores = line.split("\\\\");
System.out.println("Mode = "+mode+Arrays.toString(scores));
【问题讨论】:
您使用的是line.split("\\\\");
还是拼写错误?我想你需要line.split("\\\");
@NickD 它需要一个正则表达式,所以你需要"\\\\"
,它首先变成一个文字字符串\\
,然后是一个文字\
的正则表达式。 "\\\"
无法编译,因为它是未终止的字符串文字。
这不是一个错字,因为你必须转义 \ 一次以获得特殊字符,第二次因为它是一个字符串,如果我想拆分 \\ 我必须使用 \\\\ don'我?
您的代码对我来说运行良好。
【参考方案1】:
这是因为"\\\\"
被解析为\\
,而split method使用正则表达式,所以\\
变成\
,那么Sebastien 5000\\Loic 5000
将导致[Sebastien 5000,,Loic 5000]
改为:"\\\\\\\\"
【讨论】:
非常感谢 :) 我永远不会发现自己 :p【参考方案2】:为了好玩,除了 José Roberto 解决方案,您还可以使用一些替代表达方式(以及许多其他表达方式):
两个连续的反斜杠(与 José 相同,但使用量词):
String[] scores = line.split("\\\\2");
两个连续的非单词字符:
String[] scores = line.split("\\W2");
两个连续的标点字符:
String[] scores = line.split("\\pPunct2");
它们都产生所需的输出。
有关 Java 中的正则表达式的更多信息:
Class Pattern Javadoc Java tutorial on Regular Expressions【讨论】:
【参考方案3】:我会比尼克更进一步:
line.split("\\\");
此视图假定您尝试在出现双反斜杠的每个点拆分行 - 似乎您的代码在每个备用双斜杠处拆分,这可以解释每个名称之间的双逗号;因此,在每个拆分部分之间(即逗号之间的每个部分,有两个条目而不是一个,因此一个条目只是一个逗号)。看看这是否有效 - 祝你好运!
M.
【讨论】:
"\\" 在java中实际上是单斜杠,而对于正则表达式,这是一个转义字符,所以“\\\\”表示正则表达式中的单斜杠以上是关于读取一行文本文件,拆分为数组的主要内容,如果未能解决你的问题,请参考以下文章