简体   繁体   中英

why I am getting ArrayIndexOutOfBoundsException?

Hi I am unable to know what I am doing wrong. I have a string which is pass as an argument to a my class. I have to split that string and assign the respective values to the member variable but it is not working properly.

Here is my class.

    package virtusa;

public class pratice {
    
    String getName;
    Double getPrice;
    int getQuantity;
    String temp[]  = null;
    public pratice()
    {
        
    }
    public pratice(String rawInput)
    {
        temp = rawInput.split("$$##",2);
        getName = temp[0];
        getPrice = Double.parseDouble(temp[1]);
        getQuantity =Integer.parseInt( temp[2]);
    }
    public String getGetName() {
        return getName;
    }
    
    public Double getGetPrice() {
        return getPrice;
    }
    
    public int getGetQuantity() {
        return getQuantity;
    }


}

here is my main class

   package virtusa;

import java.util.Scanner;

public class demo {

    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        String stub = in.nextLine();
        
        pratice temp  = new pratice(stub);
        System.out.println(temp.getName);
        System.out.println(temp.getQuantity);
        System.out.println(temp.getPrice);
        

    }

}

My Input = apple$$##12.5$$##9

error i am having -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
    at virtusa.pratice.<init>(pratice.java:17)
    at virtusa.demo.main(demo.java:12)

String::split take regex as a parameter, so the $ has special meaning. You will need to escape it with a \

One of problems in your code in not escaping special characters as some comments are mentioning. In my opinion clearest solution is to use Patter quote

rawInput.split(Pattern.quote("$$##"), 3);

Other problem is that you clearly need to get there elements since you are trying to get temp[0], temp[1] and temp[2]

So the final code should look something like this

String getName;
Double getPrice;
int getQuantity;
String temp[] = null;

public Practice() {

}

public Practice(final String rawInput) {
    temp = rawInput.split(Pattern.quote("$$##"), 3);
    getName = temp[0];
    getPrice = Double.parseDouble(temp[1]);
    getQuantity = Integer.parseInt(temp[2]);
}

public String getGetName() {
    return getName;
}

public Double getGetPrice() {
    return getPrice;
}

public int getGetQuantity() {
    return getQuantity;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM