package com.Acrobot.Breeze.Utils;

/**
 * @author Acrobot
 */
public class PriceUtil {
    public static final double NO_PRICE = -1;
    public static final double FREE = 0;

    public static final String FREE_TEXT = "free";

    /**
     * Gets the price from the text
     * @param text Text to check
     * @param indicator Price indicator (for example, B for buy)
     * @return price
     */
    public static double get(String text, char indicator) {
        String[] split = text.replace(" ", "").toLowerCase().split(":");
        String character = String.valueOf(indicator);

        for (String part : split) {
            if (!part.contains(character)) {
                continue;
            }

            part = part.replace(character, "");

            if (part.equals(FREE_TEXT)) {
                return FREE;
            }

            if (NumberUtil.isDouble(part)) {
                double price = Double.valueOf(part);

                if (price == 0) {
                    return NO_PRICE;
                } else {
                    return price;
                }
            }
        }

        return NO_PRICE;
    }

    /**
     * Gets the buy price from te text
     * @param text Text to check
     * @return Buy price
     */
    public static double getBuyPrice(String text) {
        return get(text, 'b');
    }

    /**
     * Gets the sell price from te text
     * @param text Text to check
     * @return Sell price
     */
    public static double getSellPrice(String text) {
        return get(text, 's');
    }

    /**
     * Checks if the string is a valid price
     * @param text Text to check
     * @return Is the string a valid price
     */
    public static boolean textIsPrice(String text) {
        if (NumberUtil.isFloat(text)) {
            return true;
        }

        return text.trim().equalsIgnoreCase("free");
    }
}

package com.Acrobot.Breeze.Utils;

/**
 * @author Acrobot
 */
public class PriceUtil {
    public static final double NO_PRICE = -1;
    public static final double FREE = 0;

    public static final String FREE_TEXT = "free";

    /**
     * Gets the price from the text
     * @param text Text to check
     * @param indicator Price indicator (for example, B for buy)
     * @return price
     */
    public static double get(String text, char indicator) {
        String[] split = text.replace(" ", "").toLowerCase().split(":");
        String character = String.valueOf(indicator);

        for (String part : split) {
            if (!part.contains(character)) {
                continue;
            }

            part = part.replace(character, "");

            if (part.equals(FREE_TEXT)) {
                return FREE;
            }

            if (NumberUtil.isDouble(part)) {
                double price = Double.valueOf(part);

                if (price <= 0) {
                    return NO_PRICE;
                } else {
                    return price;
                }
            }
        }

        return NO_PRICE;
    }

    /**
     * Gets the buy price from te text
     * @param text Text to check
     * @return Buy price
     */
    public static double getBuyPrice(String text) {
        return get(text, 'b');
    }

    /**
     * Gets the sell price from te text
     * @param text Text to check
     * @return Sell price
     */
    public static double getSellPrice(String text) {
        return get(text, 's');
    }

    /**
     * Checks if the string is a valid price
     * @param text Text to check
     * @return Is the string a valid price
     */
    public static boolean textIsPrice(String text) {
        if (NumberUtil.isFloat(text)) {
            return true;
        }

        return text.trim().equalsIgnoreCase("free");
    }
}

Fix negative prices