我编写了以下方法来验证输入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("\"", "");


等等...但是这似乎不是一个特别好的解决方案。如果有人有更好的主意,请告诉我。非常感谢您的帮助!

最佳答案

我想说这样的事情应该代替您的方法,而无需阅读您的代码,而只是您的要求:

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("");
}

07-28 13:59