gpt4 book ai didi

java - 文件输入到 arrayList 中。用于创建新对象的相同 arrayList

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:13 25 4
gpt4 key购买 nike

我正在开发一个程序,我从文件中获取输入并使用正则表达式删除我需要的内容。我剔除了整数和字符串。每行一个。每一行都有一个对象的信息。

    try{
Scanner getAll = new Scanner(new FileReader(eventsFile));

while(getAll.hasNextLine()){
fileToArray.add(getAll.nextLine());
}

}
catch(FileNotFoundException e){
System.out.println("the file name you entered is not present in the directory");
}
catch(IOException e){
System.out.println("An I/O error present");
}

System.out.println(fileToArray.size());
// we put our regular expression here which kicks out the event
//eventPat gets everything after Event= and before ,time
Pattern eventPat = Pattern.compile("(?<=Event=)(.*)(?=,time)");
//timePat looks for everynumber from 0-9 whose size is 1 up to 5
Pattern timePat = Pattern.compile("[0-9]{1,5}");

然后,我继续将 int 添加到一个数组,并将字符串添加到另一个数组。

 // this for loop takes the fileToArray which has all the example file contents inside and      matches it for eventPat and adds its findings to an array called typeOfEvents
for(int i =0 ; i < fileToArray.size(); i++){

String friskOne = fileToArray.get(i).toString();
Matcher eventSeeker = eventPat.matcher(friskOne);
while(eventSeeker.find()){
typeOfEvents.add(eventSeeker.group());
}
}

// this for loop takes the fileToArray which has all the example file contents inside and matches it for timePat and adds its findings to an array called typeOfTime
for(int i =0 ; i < fileToArray.size(); i++){

String frisk = fileToArray.get(i).toString();
Matcher timeSeeker = timePat.matcher(frisk);
while(timeSeeker.find()){
typeOfTime.add(timeSeeker.group());
}
}

然后我使用了一个循环来制作对象。我获取每个数组的第一个索引并将它们配对在一起。某些对象可能不需要,因为最初没有在文件中创建它们的说明。

  // here the loop takes the first event in the typeOfEvent array and runs it with the first    
//this works since everything in , typeOfEvents and typeOfTime is added in the order that it is //present in the example file. The cast is added
//so that the data is changed from object to type long and string

public void action() {

for(int i = 0 ; i < typeOfTime.size(); i ++){

if(String.valueOf(typeOfEvents.get(i))=="WaterOff")
{Long a = (Long.valueOf((String)typeOfTime.get(i)));
addEvent(new WaterOff(a));}// Clarification needed does this convert to long from

else if ((String)typeOfEvents.get(i)=="WindowMalfunction")
addEvent(new WindowMalfunction(Long.valueOf((String)typeOfTime.get(i)))); }

错误之一是我收到索引越界错误。其次,我认为我没有将文件输入转换为正确的类型。我需要将字符串数组中的所有字符串转换为 String,并将存储在 int 数组中的所有整数转换为 long,因为这就是我创建对象所需的。例子该文件有一行 - Event=Wat​​erOff,time=10000我将 WaterOff 存储在 eventSeeker 中,因为 WaterOff 是一个事件。我在 timeSeeker 中保留 10000 作为其时间。我必须稍后输入它们来制作对象。

谢谢

最佳答案

在此循环中:

for(int i = 0 ; i < typeOfTime.size(); i ++){
if(String.valueOf(typeOfEvents.get(i))=="WaterOff")

您正在迭代直到typeOfTime结束,但访问不同列表 typeOfEvents 的元素。当typeOfTime的大小大于typeOfEvents的大小时,可能会发生IndexOutOfBoundsException,因此i的值将超出typeOfEvents的范围。您需要重新设计逻辑以避免这种情况。

您尚未共享 typeOfTimetypeOfEvents 的声明。尝试这样的事情:

List<String> typeOfEvents = new ArrayList<String>();
List<Long> typeOfTime = new ArrayList<Long>();

要在 typeOfTime 中添加 Long,请像这样编写:

typeOfTime.add(Long.parseLong(timeSeeker.group()));

代码质量问题

请注意,您不需要像这样的两个循环:

for(int i =0 ; i < fileToArray.size(); i++) {
// logic to fill typeOfEvents
}
for(int i =0 ; i < fileToArray.size(); i++) {
// logic to fill typeOfTime
}

您可以在一个循环中执行这两项操作:

for(int i =0 ; i < fileToArray.size(); i++) {
// logic to fill typeOfEvents
// logic to fill typeOfTime
}

你的格式太糟糕了。使用 IDE 的功能可以很好地重新格式化代码,例如在 Eclipse 中,Control Shift f 键盘快捷键将为您完成此操作。应用上述建议并修复格式后,代码将如下所示并且更具可读性:

    for(int i =0 ; i < fileToArray.size(); i++){
String frisk = fileToArray.get(i).toString();

Matcher eventSeeker = eventPat.matcher(frisk);
while(eventSeeker.find()){
typeOfEvents.add(eventSeeker.group());
}

Matcher timeSeeker = timePat.matcher(frisk);
while(timeSeeker.find()){
typeOfTime.add(timeSeeker.group());
}
}

关于java - 文件输入到 arrayList 中。用于创建新对象的相同 arrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27473497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com