I need a java method public static String[] loadFile(String fname, String...line
ID: 3599734 • Letter: I
Question
I need a java method public static String[] loadFile(String fname, String...lineRange). lineRange show how many lines should be loaded. We have to invoke method like this: String array[] = loadFile("myfile.txt", "1-9"); String array[] = loadFile("myfile.txt", "^-$");// from first to last
String array[] = loadFile("myfile.txt", "7,7,7,7");// i want to load 7th line four times
String array[] = loadFile("myfile.txt", "-"); // it means i want to load all file
String array[] = loadFile("myfile.txt", "-5, -5, -5"); // i want to load file from start to 5 three times
String array[] = loadFile("myfile.txt", "5-1"); // i want to load file from 5 line to first.
String array[] = loadFile("myfile.txt", "$, $, $"); // 3 times last line....
and in the main method print loadFile with different lineRange.
Focus how we can proceed lineRange like String with "-" : "1-9", "5-1", "-2,-2,-2", "-", "^-$", "$,$,$", "7, 7, 7, 7, 7", etc
Thanks
Explanation / Answer
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class FileLoader {
public static String[] loadFile(String fname, String lineRange){
ArrayList<String> allLines = new ArrayList<>();
ArrayList<String> finalLines = new ArrayList<>();
String[] lineOut = null;
try{
Scanner sc = new Scanner(new File(fname)); //Opening file to read
while(sc.hasNext()){
allLines.add(sc.nextLine()); //Reading all lines
}
sc.close();
}
catch(Exception ex){
System.out.println("Can Not Open File");
}
String filterTockn[] = lineRange.split(","); //spliting lineRange argument by comma and getting all tockens
int numOfTocken = filterTockn.length;
for(int i=0; i<numOfTocken;i++){ //Processing all tockens
String tkn = filterTockn[i];
if(tkn.equals("^-$")||tkn.equals("-")){ //Case for all file
finalLines.addAll(allLines);
}
else if(tkn.contains("-")){ // Case for range
String values[] = tkn.split("-");
int startRange = 0;
int endRange = allLines.size()-1;
if(values.length==1){ //Case for one range["-4"]
if(values[0].equals("")||values[0].equals("^"))
endRange = 0;
else if(values[0].equals("$"))
endRange = allLines.size()-1;
else{
endRange = Integer.parseInt(values[0]);
}
}
else if(values.length==2){ //Case for both range [5-7]
if(values[0].equals("")||values[0].equals("^"))
startRange = 0;
else if(values[0].equals("$"))
startRange = allLines.size()-1;
else{
startRange = Integer.parseInt(values[0]);
}
if(values[1].equals("")||values[1].equals("^"))
endRange = 0;
else if(values[1].equals("$"))
endRange = allLines.size()-1;
else{
endRange = Integer.parseInt(values[1]);
}
//System.out.println("StartRange:"+startRange);
//System.out.println("EndRange:"+endRange);
}
//Handing forward and reverse range
if(startRange<=endRange){
for(int j=startRange; j<endRange;j++){
finalLines.add(allLines.get(j));
}
}
else{
for(int j=startRange; j>endRange;j--){
finalLines.add(allLines.get(j));
}
}
}
}
lineOut = new String[finalLines.size()];
for(int i=0;i<finalLines.size();i++){
lineOut[i] = new String(finalLines.get(i)); //
}
return lineOut;
}
public static void main(String[] args) {
String lines[] = loadFile("Employee.txt", "^-$");
lines = loadFile("Employee.txt", "2-$,1-3");
lines = loadFile("Employee.txt", "-2,-2,-2");
lines = loadFile("Employee.txt", "2-10,1-3");
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.