
Dina Hafez
10,288 PointsNot sure why it is not working.
Hello, I am not sure what I am doing wrong in my code. I am checking the string by using matches method and regex and inverting the result with not operator. Is there something that I am missing?
public class Order {
private String itemName;
private int priceInCents;
private String discountCode;
public Order(String itemName, int priceInCents) {
this.itemName = itemName;
this.priceInCents = priceInCents;
}
public String getItemName() {
return itemName;
}
public int getPriceInCents() {
return priceInCents;
}
public String getDiscountCode() {
return discountCode;
}
public void applyDiscountCode(String discountCode) {
this.discountCode = normalizeDiscountCode(discountCode);
}
private String normalizeDiscountCode(String discountCode) {
if (! discountCode.matches("[a-zA-Z$]")) {
throw new IllegalArgumentException("Invalid discount code");
}
return discountCode.toUpperCase();
}
}
public class Example {
public static void main(String[] args) {
// This is here just for example use cases.
Order order = new Order(
"Yoda PEZ Dispenser",
600);
// These are valid. They are letters and the $ character only
order.applyDiscountCode("abc");
order.getDiscountCode(); // ABC
order.applyDiscountCode("$ale");
order.getDiscountCode(); // $ALE
try {
// This will throw an exception because it contains numbers
order.applyDiscountCode("ABC123");
} catch (IllegalArgumentException iae) {
System.out.println(iae.getMessage()); // Prints "Invalid discount code"
}
try {
// This will throw as well, because it contains a symbol.
order.applyDiscountCode("w@w");
}catch (IllegalArgumentException iae) {
System.out.println(iae.getMessage()); // Prints "Invalid discount code"
}
}
}
1 Answer

KRIS NIKOLAISEN
Pro Student 51,735 PointsThis stack overflow may help. Try adding a + to your regex.
if (! discountCode.matches("[a-zA-Z$]+")) {
Dina Hafez
10,288 PointsDina Hafez
10,288 PointsYes! It worked. Thank you :)