Java:如何只允许字符串中的整数和逗号?

时间:2016-04-08 14:47:00

标签: java validation input

我编写了以下方法来验证输入String并将其输出为int数组。该方法完全按照我的需要工作,但我想为它添加一些额外的验证,以便它只允许输入中的整数和逗号,所以没有错误。

正确的输入示例如下:

"7,23,62,8,1130"

方法是:

public static int[] validator (String [] check) {

    int [] out = new int[5];

    try
    {
        if (0 < Integer.parseInt(check[0]) && Integer.parseInt(check[0]) < 100)
        {
            out[0] = Integer.parseInt(check[0]);
        }
        else
        {
            throw new InvalidMessageException();
        }
    }
    catch (InvalidMessageException ex)
    {
        System.err.println("Invalid instruction message");
        return null;
    }

    try
    {
        if (0 < Integer.parseInt(check[1]))
        {
            out[1] = Integer.parseInt(check[1]);
        }
        else
        {
            throw new InvalidMessageException();
        }
    }
    catch (InvalidMessageException ex)
    {
        System.err.println("Invalid instruction message");
        return null;
    }

    try
    {
        if(0 < Integer.parseInt(check[2]))
        {
            out[2] = Integer.parseInt(check[2]);
        }
        else
        {
            throw new InvalidMessageException();
        }
    }
    catch (InvalidMessageException ex)
    {
        System.err.println("Invalid instruction message");
        return null;
    }

    try
    {
        if (0 <= Integer.parseInt(check[3]) && Integer.parseInt(check[3]) < 256)
        {
            out[3] = Integer.parseInt(check[3]);
        }
        else
        {
            throw new InvalidMessageException();
        }
    }
    catch (InvalidMessageException ex)
    {
        System.err.println("Invalid instruction message");
        return null;
    }

    try
    {
        if(0 < Integer.parseInt(check[4]))
        {
            out[4] = Integer.parseInt(check[4]);
        }
        else
        {
            throw new InvalidMessageException();
        }
    }
    catch (InvalidMessageException ex)
    {
        System.err.println("Invalid instruction message");
        return null;
    }

    return out;

}

我考虑过这样做:

    inputText = inputText.replace(".", "");
    inputText = inputText.replace(":", "");
    inputText = inputText.replace(";", "");
    inputText = inputText.replace("\"", "");
等等......但它似乎并不是一个特别好的解决方案。如果有人有更好的想法,请告诉我。非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式验证输入:

[0-9]+(,[0-9]+)*,?

使用字符串匹配(正则表达式)方法检查它:

if (yourString.matches("[0-9]+(,[0-9]+)*,?")) {

}

答案 1 :(得分:2)

我会说这样的话应该取代你的方法,而不必阅读你的代码,只需要你的要求:

String input = "7,23,62,8,1130";
if (input.matches("(?:\\d+(?:,|$))+")) {
    int[] result = Arrays.stream(input.split(",")).mapToInt(Integer::parseInt).toArray();
} else {
    throw new InvalidMessageException("");
}

答案 2 :(得分:0)

这正是正则表达式的用途:

string userSelection = seatingArray[userRow - 1][userColumn -1];