我正在創建一個簡單的 rpg 游戲,我需要從一個檔案中獲取資訊并將其存盤在我的變數中,以便能夠讓用戶輕松保存/修改游戲中的專案,我可以讀取我的檔案,但我不知道如何獲取此標簽中的名稱和數字:
itemName:("Steel Sword"),itemStats(2,0,0);
我需要在字串中獲取“鋼劍”以及其他變數的數字...
也許您也可以告訴我如何將名稱與統計資料聯系起來,我沒有真正的好方法。
我嘗試使用 indexOf 來獲取字串的開頭和結尾,但我需要找出統計資料上的分隔符,也許有更可靠的方法可以做到這一點......
uj5u.com熱心網友回復:
以下代碼使用了Item類,以便可以實體化 Items 的實體,因為檔案中必須有多個 Item。讀取檔案后,串列介面 ( List<Item>) 將保存Item的實體。閱讀代碼中的注釋:
物品類:
public class Item {
private String itemName; // Item Name
// For lack of better member variable names since none were supplied in post.
private int manna = 0; // Stat 1
private int banna = 0; // Stat 2
private int hanna = 0; // Stat 3
public Item() { }
public Item(String itemName, int manna, int banna, int hanna) {
this.itemName = itemName;
this.manna = manna;
this.banna = banna;
this.hanna = hanna;
}
// Getters & Setters
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getManna() {
return manna;
}
public void setManna(int manna) {
this.manna = manna;
}
public int getBanna() {
return banna;
}
public void setBanna(int banna) {
this.banna = banna;
}
public int getHanna() {
return hanna;
}
public void setHanna(int hanna) {
this.hanna = hanna;
}
@Override
public String toString() {
return itemName ", " manna ", " banna ", " hanna;
}
}
檔案閱讀器/決議器 ( getItemsFromFile() ) 代碼:
public void getItemsFromFile(String filePath) throws IOException {
itemsList = new ArrayList<>(); // Initialize itemsList
// Read file...
// 'Try With Resources' used here to Auot-Close reader and free resources:
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
line = line.trim(); // Remove leading/trailing whitespaces (if any);
// Skip blank lines (if any).
if (line.isEmpty()) {
continue;
}
// Get Items (only) ...
if (line.startsWith("itemName:")) {
// Parse the Item line...
String[] parts = line.split("itemStats");
String name = parts[0].substring(parts[0].indexOf("(\"") 2, parts[0].indexOf("\")"));
parts[1] = parts[1].replaceAll("[^0-9,]", "");
String[] statValues = parts[1].split(",");
int m = Integer.parseInt(statValues[0]);
int b = Integer.parseInt(statValues[1]);
int h = Integer.parseInt(statValues[2]);
itemsList.add(new Item(name, m, b, h)); // Add Item instance to List.
}
}
}
}
如何使用上述getItemsFromFile()方法:
// Declare as Class member
List<Item> itemsList;
// In some class method...
try {
// Do as the method name states (use the proper file path):
getItemsFromFile("GameConfig.txt");
}
catch (IOException ex) {
/* Do what you want with the exception (if there is one).
Whatever you do, don't leave this blank. */
System.err.println(ex);
}
//Display Items contained within the itemsList List:
for (Item items : itemsList) {
/* Using the Item class toString() method: */
System.out.println(items.toString());
/* Example of retrieving each object within an Item instance:
using Item class Getter methods: */
System.out.println("Item Name: " items.getItemName()); // String
System.out.println("The Manna: " items.getManna()); // int
System.out.println("The Banna: " items.getBanna()); // int
System.out.println("The Hanna: " items.getHanna()); // int
System.out.println();
}
uj5u.com熱心網友回復:
您正在尋找的是“決議”您的文本檔案。決議是將任意資料(通常是人類可讀的文本)轉換為計算機程式可以理解的資料的地方。決議自定義格式(我認為這是因為我似乎無法識別它)可能非常困難,因此您可能需要考慮使用更流行的格式,例如 JSON,它已經有很多庫可以為您決議它。JSON 實際上與您已經使用的格式非常相似,因此切換起來應該不會太難!您提供的 JSON 格式的資料可能如下所示(可以進行一些小的更改,例如可以洗掉值之間的空格):
{"itemName": "Steel Sword", "itemStats": [2,0,0]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/533188.html
標籤:爪哇数组文件
