我可以使用任何其他方法将.txt文件中以分号分隔的字符串读取到Has map而不是* sourceArra * y
public static void main(String[] args) throws IOException {
try {
ArrayList<Synset> booleansynsets = null;
ArrayList<Synset> booleanduplicatesynsets = null;
Map<String, String> basebooleanentitieslist = new HashMap<String, String>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\anand\\Desktop\\updatedDuplicateBooleanEntitiesList-sorted.txt"));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
String[] sourceArray = line.split(";");
basebooleanentitieslist.put(sourceArray[0],sourceArray[1]);
System.out.println(line);
}
//更新后的
bufferedReader.toString();
StringTokenizer st1 = new StringTokenizer(bufferedReader.toString(),";");
while ((line = bufferedReader.readLine()) != null && st1.hasMoreTokens()) {
// String[] sourceArray = line.split(";");
basebooleanentitieslist.put(st1.nextToken(";"), st1.nextToken());
System.out.println(line);
}
答案 0 :(得分:0)
考虑使用StringTokenizer
类。
答案 1 :(得分:0)
您可以使用StringTokenizer
(或)拆分。
答案 2 :(得分:0)
目前的方法没有问题,但感觉它是否冗长,我的意思是有一种方法来优化它而不使用sourceArray。
您没有说出您要优化的内容:性能?内存使用情况?可读性?
如果您担心表现,下一个问题是您的担忧是否合理。你运行你的申请了吗?太慢了吗?您是否对其进行了分析并确定分割线路需要花费大量时间?
使用数组有什么特别的错误? (是的,我知道分配数组会花费一些东西,但是你有证据证明这是重要的吗?)
如果您正在尝试优化可读性,那么我会说使用String.split对于此示例可能更具可读性。 (许多Java程序员从未遇到/使用过StringTokenizer
类。)
如果您正在尝试针对性能/内存使用进行优化,那么StringTokenizer
值得尝试,但我不能保证它更快。另一种方法是直接使用Pattern
和Matcher
,如下所示:
Pattern pattern = Pattern.compile("([^;]*);(.*)");
while ((line = bufferedReader.readLine()) != null) {
Matcher matcher = pattern.matcher(line)
if (matcher.matches()) {
basebooleanentitieslist.put(matcher.group(1), matcher.group(2));
}
}
(顺便说一下,代码将处理行没有正常拆分的情况;即没有抛出异常。如果你想明确处理它,添加一个else
子句。)< / p>