- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被要求以数组的形式创建一个员工电话簿,其中包含他们的姓名和分机号码。电话簿支持以下几个功能:
添加将按姓氏字母顺序插入的新条目
按姓名或号码删除条目
查找名字给定的名字
更改号码
打印整个电话簿
所以没有什么进展,但是我遇到的问题在于文本文件以及将信息正确存储在数组中。该文本文件包含由制表符分隔的数据,格式如下:
姓氏<--TAB-->姓名缩写<--TAB-->扩展名
我相信从作业的措辞来看,我被要求首先将填充的文本文件数据加载到程序中的数组中,然后使用我之前提到的函数对其进行操作。他们明确表示这里不需要写回文件。
到目前为止,我已经创建了几个类,其中包含将在项目中使用的每个对象的一般信息(即 Entry 类、Directory 接口(interface) [必需]、ArrayDirectory 类、DirectoryFile 类)。我试图从文本文件中读取 3 个不同的项目,然后将其存储在我为其创建构造函数的 Entry 对象中。我知道如何使用这些方法,我只是无法在文本文件和数组之间创建这个初始链接,这意味着我根本无法取得进展。我尝试过实现网上找到的解决方案,但事实证明这更令人困惑。
由于我将数据保存为自定义对象(条目),我在这里也遇到了问题,并且最终感到非常困惑。
public class Entry {
private String firstName = null;
private String surname = null;
private String extension = null;
public Entry(String firstName, String surname, String extension) {
super();
this.firstName = firstName;
this.surname = surname;
this.extension = extension;
}
...(getters and setters, toString)...
public class ArrayDirectory implements Directory {
private final static int MAX_ENTRIES = 20;
private static Scanner input = new Scanner(System.in);
DirectoryFile file = new DirectoryFile("C:\\Users\\John\\Documents\\Phonebook.txt");
static List<Entry> phonebook = new ArrayList<>(MAX_ENTRIES);
public void addEntry() throws IOException {
// check if phone book is empty before loading entries
System.out.println(phonebook.isEmpty());
loadEntries(file.getFile());
System.out.println("Enter first name: ");
String fname = input.nextLine();
System.out.println("Enter second name: ");
String sname = input.nextLine();
System.out.println("Enter telephone extension: ");
String telephone = input.nextLine();
Entry entry = new Entry(fname, sname, telephone);
phonebook.add(entry);
System.out.println("Added staff member: \n" + fname + "\n" + sname + "\n" + telephone);
System.out.println(Arrays.toString(phonebook.toArray()));
}
public String loadEntries(File file) throws IOException {
String surname = null, fname = null, extension = null;
BufferedReader br = new BufferedReader(new FileReader(file));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
String arr[] = line.split("\\s+");
surname = arr[0];
fname = arr[1];
extension = arr[2];
Entry entry = new Entry(surname, fname, extension);
phonebook.add(entry);
line = br.readLine();
}
} finally {
br.close();
}
return null;
}
...(other methods for functionality, testing etc.)...
public class DirectoryFile {
private File file;
public DirectoryFile(String fileName) {
this.file = new File(fileName);
}
public DirectoryFile(File file) {
this.file = file;
}
public File getFile() {
return file;
}
我遇到的问题是,当运行 loadEntries() 方法时,它会给出 OutOfBoundsException 并指出索引 1 超出长度 1 的范围。我想我的方法的返回签名也可能不正确,但这让我更加困惑。我应该将电话簿 ArrayList 传递到方法中而不是返回 String 吗?
抱歉,这是我第一篇在线寻求帮助的帖子,因此如果我重复了自己的话,我深表歉意。
最佳答案
我现在没有太多时间,但这就是我为你做的......修改您的 Entry
类以实现 Comparable
并重写 equals(),如下所示:
public class Entry implements Comparable {
private String firstName = null;
private String surname = null;
private String extension = null;
public Entry(String firstName, String surname, String extension) {
this.firstName = firstName;
this.surname = surname;
this.extension = extension;
}
@Override
public int compareTo(Object arg0) {//important for sorting
this.surname.compareTo(((Entry) arg0).surname);
return 0;
}
@Override
public boolean equals(Object arg0) {//important for deleting
return ((Entry) arg0).firstName.equalsIgnoreCase(this.firstName);
}
}
以下是其他附加方法:
public void writetofile(List<Entry> entry) throws Exception {
File f = new File("path");
try (Writer w = new FileWriter(f); PrintWriter pw = new PrintWriter(w);) {
for (Entry e : entry) {
String line = e.surname + "--------" + e.firstName + "--------" + e.extension;
pw.println(line);
}
} catch (Exception e) {
throw e;
}
}
public List<Entry> sortbysurname(List<Entry> entry) {
Collections.sort(entry);
return entry;
}
// returns the index of the entry
public boolean deleteByName(String name, List<Entry> entry) {
return entry.remove(new Entry(name, "", ""));
}
关于java - 如何将文本文件中的不同数据存储到ArrayList中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55870019/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!