我们有一个任务/项目,我们创建一个包含多个不同对象的停车场,然后通常每周我们添加/改进它。本周我们获得了一个.txt文件,其中的行看起来像"Bicycle%4%2%ABC40%false"
或"Auto%22%7%ABC21%false"
。每个%
用作分隔符,表示相应对象(汽车或自行车)的单独属性(自行车的速度,乘客容量,序列号和布尔锁状态)。
我们需要读取文件并使用split在该行中创建一个新对象。我遇到的问题是获取当前为字符串的数字,将其解析为int或boolean,然后将其添加到新的Bicycle(或Auto)。似乎无法使语法正确。
还想知道如果说自行车开始制造自行车,我的“if”逻辑是否合适?
更新
我想我已经解决了解析问题,但现在它说它无法找到我的自行车属性......说“找不到符号”如此接近!
这是我的代码:
public class Driver
{
private static Object myBicycle;
private static Object myAuto;
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException
{
Scanner scan = new Scanner(new File("Vehicles.txt"));
ArrayList<Object> myVehicles = new ArrayList<Object>();
while (scan.hasNext())
{
String line = scan.nextLine();
String [] data = line.split("%");
if (data[0].equals("Bicycle"))
{
speed = (Integer.parseInt(data[1]));
PassCap = (Integer.parseInt(data[2]));
serialNumber = (Integer.parseInt(data[3]));
locked = (Boolean.parseBoolean(data[4]));
brand = Brand.randomBrand();
Bicycle myBicycle = new Bicycle(speed, PassCap, serialNumber, locked, brand);
myVehicles.add(myBicycle);
}
答案 0 :(得分:0)
我不确定你的实施是什么,但你可以尝试这样的事情:
public static void main(String[] args) throws FileNotFoundException
{
Scanner scan = new Scanner(new File("/home/buddha/MYDRIVE/exploring/java/src/Vehicles.txt"));
ArrayList<String> myVehicles = new ArrayList<String>();
while(scan.hasNext()) {
String line = scan.nextLine();
String[] data = line.split("%");
if (data[0].toLowerCase().equals("bicycle")) {
System.out.println(Integer.parseInt(data[1]));
System.out.println(Integer.parseInt(data[2]));
System.out.println(data[3]);
System.out.println(Boolean.parseBoolean(data[4]));
}
else if (data[0].toLowerCase().equals("auto")) {
System.out.println(Integer.parseInt(data[1]));
System.out.println(Integer.parseInt(data[2]));
System.out.println(data[3]);
System.out.println(Boolean.parseBoolean(data[4]));
}
}
}
就像setter函数一样,您可以创建getter函数并检查值是否已正确存储。
答案 1 :(得分:0)
所以,这一行:
String [] data = line.split("%");
...采用这样的字符串:
"Bicycle%4%2%ABC40%false"
或"Auto%22%7%ABC21%false"
并将它们变成这样的字符串数组:
data[0] : `Bicycle` or `Auto`
data[1] : `4` or `22`
data[2] : `2` or `7`
data[3] : `ABC40` or `ABC21`
data[4] : `false` or `false`
所以现在你只需要将这些字符串解析为int
和bool
等价物:
speed = Integer.parseInt(data[1]);
passCap = Integer.parseInt(data[2]);
serialNumber = data[3]; // This is a string, right?
locked = Boolean.parseBoolean(data[4]);
如果serialNumber是数字,那么您可能只希望结尾的数字部分(例如"21"
vs "ABC21"
):
serialNumber = Integer.parseInt(data[3].Substring(3));