将字符串解析为Ints

时间:2018-03-29 21:07:46

标签: java object

我们有一个任务/项目,我们创建一个包含多个不同对象的停车场,然后通常每周我们添加/改进它。本周我们获得了一个.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);
            }

2 个答案:

答案 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`

所以现在你只需要将这些字符串解析为intbool等价物:

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));