2015-09-09 79 views
0

如果任何人都可以提供幫助, 我有問題將文本文件中的值分配給類字段。 我創建了一個類叫的過程,它有一個像從txt文件讀取並將行的值分配給類字段

private String agent; 
private String request_type; 
private String class_type; 
private String num_of_seats; 
private String arrivaltime; 

我的動機一個領域是在文件中指定1block由空格分開的另一個塊請求類型等等... 說Agent3 R F 10 1這裏劑Agent3將分配給代理和R將分配給request_type F到class_type,10到num_of_seats,1到達時間

我使用arraylist來保存輸入文件(不是強制性的,我知道這只是y)和另一個arraylist保存我的類的對象。我使用substring方法手動分配值有沒有辦法,以便我可以簡單地採取塊瓦特這是由太空分開,做我的工作。

輸入文件(input.txt中是)

Agent1 R F 2 0 
Agent3 R F 10 1 
Agent1 C F 1 4 
Agent2 C B 2 1 
Agent2 R B 10 0 

.............................. ..................................................

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

/** 
* @author Navdeep 
* 
*/ 
class Process 
{ 
    private String agent; 
    private String request_type; 
    private String class_type; 
    private String num_of_seats; 
    private String arrivaltime; 
    public Process() 
    { 
     setProcess("0", null, null, "0", "0"); 
    } 

    public Process(String a, String b,String c,String d,String e) 
    { 

     setProcess(a,b,c,d,e); 
    } 
    public void setProcess(String a, String b,String c,String d,String e) 
    { 
     setAgent(a); 
     setRequest_type(b); 
     setClass_type(c); 
     setNum_of_seats(d); 
     setArrivaltime(e); 
    } 
    public void setAgent(String a){ 
     agent = a; 

    } 
    public void setRequest_type(String b){ 
     request_type = b; 
    } 
    public void setClass_type(String c) 
    { 
     class_type = c; 
    } 
    public void setNum_of_seats(String d) { 
    num_of_seats = d; 
    } 
    public void setArrivaltime(String e) 
    { 
     arrivaltime=e; 
    } 
    public String getAgent(){ 
     return agent; 

    } 
    public String getRequest_type(){ 
     return request_type ; 
    } 
    public String getClass_type() 
    { 
     return class_type; 
    } 
    public String getNum_of_seats() { 
    return num_of_seats ; 
    } 
    public String getArrivaltime() 
    { 
     return arrivaltime; 
    } 

    @Override 
    public String toString() { 
     return String.format("%s,%s,%s,%s,%s",getAgent(),getRequest_type(),getClass_type(),getNum_of_seats(),getArrivaltime()); 
    } 

} 

public class main 
{ 
    public static void main(String[] args) throws FileNotFoundException 
    { 
     File temp = new File(args[0]); 
     Scanner sc = new Scanner(temp); 
     ArrayList<String> input = new ArrayList<String>(); 

     while(sc.hasNext()) 
     { 
     input.add(sc.nextLine()); 

     } 
     List<Process> mylist = new ArrayList<Process>();  
     for (int i= 0; i <input.size();i++) 
     { 
     Process processobject = new Process(); 
     processobject.setAgent(input.get(i).substring(0, 6)); 

     processobject.setRequest_type(input.get(i).substring(7,8)); 
     processobject.setClass_type(input.get(i).substring(9,10)); 
     if(input.get(i).length() == 15) 
     { 
      processobject.setNum_of_seats(input.get(i).substring(11,13)); 
      processobject.setArrivaltime(input.get(i).substring(14,15));  
     } 
     if(input.get(i).length() == 14) 
     { 
     processobject.setNum_of_seats(input.get(i).substring(11,12)); 
     processobject.setArrivaltime(input.get(i).substring(13,14)); 
     } 
     mylist.add(processobject); // fill arraylist with objects of my class 
     } 
     System.out.println("array list of the input from the file" + input); 
     System.out.println("\n \nobjects in my list"+ mylist); 
    } 
} 

我的項目的總體動機是根據領域優先級對對象進行排序。

+0

可能你的過程對象在將來不應該改變,所以也許你應該考慮讓字段最終,然後刪除設置方法來獲得不錯的不可變對象。 – Zano

+0

@Zano還沒有讓你明確指出你的意思 – Nav

+0

我只是說,可能你不想讓任何人或任何東西在將來改變你的過程對象值。如果是這樣,那麼使它不可變,如果不是,那麼忽略我以前的骯髒評論。 – Zano

回答

1

如果你的目標是創建進程類的實例,那麼你可以使用下面的代碼:

while(sc.hasNext()) 
{ 
    String line = sc.nextLine(); 
    String elements[] = line.split(" "); 
    Process processobject = new Process(); 
    processobject.setProcess(elements[0],elements[1],elements[2],elements[3],elements[4]); 
} 

您可以通過設置直接訪問類提高你的setProcess方法屬性與this參考。您也可以將相同的參數傳遞給Process類構造函數,那麼您將不需要0​​方法。檢查下面的代碼。

public Process(String agent, String request_type, String class_type, String num_of_seats, String arrivaltime) { 
    this.agent = agent; 
    this.request_type = request_type; 
    this.class_type = class_type; 
    this.num_of_seats = num_of_seats; 
    this.arrivaltime = arrivaltime; 
} 
+0

我正在使用for循環來製作我的類的對象,並將它們放入數組列表....我的目標是設置該對象的每個字段的值。我正在使用子字符串方法,但問題是,如果我得到任何其他行,我不期望在我的代碼說。 – Nav

+0

Agent1 RF 10 1這裏簡單地使用字符串即時將第一個6個元素分配給代理人第8個元素到第10個元素到第12和13個到座位數和第15個元素到達時間 – Nav

+0

但是如果輸入是代理1 RF 1 1我會有一個問題來處理這個問題,好像我使用previus方法我會得到一個額外的空間 – Nav

1

試試這個:

 ClassLoader classLoader = getClass().getClassLoader(); 
     File file = new File(classLoader.getResource(configFileName).getFile()); 
     input = new FileInputStream(someFilePath); 
     prop.load(input); 
     String someString=prop.getProperty("someString"); 
     int someintValue=new Integer(prop.getProperty("someintValue")); 
相關問題