所以我有一个名为stock.txt的文本文档,其中包含以下内容:
AAPL; Apple Inc.
IBM; International Business Machines Corp.
KO; The Coca-Cola Company
FB; Facebook Inc.
SBUX; Starbucks Corp.
我想将每个元素存储到一个HashMap中,股票代码作为关键字,公司名称作为项目。我最初尝试将所有内容存储在ArrayList中,但是当我想要打印出一行时,例如:
AAPL;Apple Inc.
我愿意:
System.out.println(array.get(0));
它会给我输出:
APPL;Apple
并打印array.get(1)会给我" Inc。"部分。
所以我的首要问题是如何确保我可以在HashMap中正确存储这些内容,以便我可以获得整个字符串" Apple Inc."成为地图的一部分。 谢谢!
答案 0 :(得分:0)
您可以尝试以下操作:
InputStream stream=new FileInputStream(new File("path"));
BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
String line;
String tok[];
Map<String, Object> map=new HashMap<String, Object>();
while((line=reader.readLine())!=null){
tok=line.split(";");
map.put(tok[0].trim(), tok[1].trim());
}
System.out.println(map);
上面的代码从特定路径读取文件,并从;
字符中拆分读取行并将其存储到map
。
希望它有所帮助。
答案 1 :(得分:0)
没有理由不能将信息存储到ArrayList中。缺少的数据更多地与您阅读和处理文件的方式有关,而不是与存储文件的结构有关。话虽如此,使用HashMap将允许您分别存储线的两个部分,同时保持它们之间的链接。 ArrayList方法不保留该链接 - 它只是一个有序列表。
这就是我要做的,这与Darshan的方法类似(你需要Java 1.7 +):
public HashMap<String, String> readStockFile(Path filePath, Charset charset)
{
HashMap<String, String> map = new HashMap<>();
try (BufferedReader fileReader =
Files.newBufferedReader(filePath, charset))
{
final int STOCK_CODE_GROUP = 1;
final int STOCK_NAME_GROUP = 2;
/*
* Regular expression - everything up to ';' goes in stock code group,
* everything after in stock name group, ignoring any whitespace after ';'.
*/
final Pattern STOCK_PATTERN = Pattern.compile("^([^;]+);\s*(.+)$");
String nextLine = null;
Matcher stockMatcher = null;
while ((nextLine = reader.readLine()) != null)
{
stockMatcher = STOCK_PATTERN.matcher(nextLine.trim());
if (stockMatcher.find(0))
if (!map.containsKey(stockMatcher.group(STOCK_CODE_GROUP)))
map.put(stockMatcher.group(STOCK_CODE_GROUP),
stockMatcher.group(STOCK_NAME_GROUP));
}
}
catch (IOException ioEx)
{
ioEx.printStackTrace(System.err); // Do something useful.
}
return map;
}
如果您希望将插入顺序保留在地图中,请将HashMap替换为LinkedHashMap。正则表达式(Pattern和Matcher)属于java.util.regex包,而Path和Charset分别位于java.nio.file和java.nio.charset中。您需要使用Path.getRoot()
,Path.resolve(String filePath)
和Charset.forName(String charset)
来正确设置您的参数。
如果您遇到格式不正确的行或文件在文件中出现两次,您可能还需要考虑如何处理。这些将对两个'ifs'形成'else'条款。