【问题标题】:Check if String contain only 2 numbers separated by 1 comma in Java [closed]检查String是否仅包含Java中用1个逗号分隔的2个数字[关闭]
【发布时间】:2020-10-18 07:58:10
【问题描述】:

我需要验证输入的行。但每行只能包含 2 个数字,用 1 个逗号分隔。格式示例:

1,4

2,7

8,9

第一个数字也必须在某个最大值以下(我的程序通过 id.size() 方法检查可能的最大值,它给出了列表的大小,并且它必须是第一个可能的最大值字符串)。

第二个数字可以是任意值。

【问题讨论】:

  • 好吧...发布你目前尝试过的代码。
  • 首先,用逗号分割它,并计算部分(注意确保正确处理尾随逗号);然后将这两部分解析为整数,并检查它们。

标签: java string validation netbeans integer


【解决方案1】:

使用它来获取两个数字(s 是输入字符串):

int first=Integer.parseInt(s.split(",")[0].trim().replace("(", ""));
int second=Integer.parseInt(s.split(",")[1].trim().replace(")", ""));

这将使您获得编号并摆脱()。您应该对输入的每一行使用它。 要检查输入是否有更多数字,请使用:

if(s.split(",").length>2){
    //show some error
}

在此之后,您只需检查数字的最小值和最大值。

【讨论】:

  • 是的,没错
【解决方案2】:

首先,您要检查您拥有的行是否包含 2 个数字和一个逗号,然后您必须检查逗号组成的两个子字符串是否是数字。所以你想要的代码如下。

public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter String: ");
    String line = br.readLine();
    System.out.println(line);

    int max_number = 100;
    int firstNumber = 0, secondNumber = 0;
    if (line.contains(",")) {
        if(isNumeric(line.substring(0,line.indexOf(","))) && isNumeric(line.substring(line.indexOf(",")+1))){
            firstNumber = Integer.parseInt(line.substring(0,line.indexOf(",")));
            secondNumber = Integer.parseInt(line.substring(line.indexOf(",")+1));
        }

    }

    if(firstNumber <= max_number){
        System.out.println("FirstNumber: " + firstNumber + " SecondNumber: " + secondNumber);
    }

}

public static boolean isNumeric(String str) {
    if (str == null) {
        return false;
    }
    try {
        double d = Double.parseDouble(str);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

【讨论】:

    【解决方案3】:

    如果您只使用整数,您可以使用正则表达式来验证您有两个用逗号分隔的数字。

    if(str.matches("-?[0-9]+,-?[0-9]+")){
     //valid
    } else {
     //invalid
    }
    

    之后,您可以使用String#splitInteger.parseInt 来获取这两个数字。

    final String[] parts = str.split(",");
    final int num1 = Integer.parseInt(parts[0]);
    final int num2 = Integer.parseInt(parts[1]);
    if(num1 < MAX_VALUE_FOR_FIRST_NUM){
       //valid
    } else {
      //invalid; display error message
    }
    

    【讨论】:

    • 这很好地完成了这项工作,但是它缺少检查多行,我如何让它在最后也成为 \n ?我需要它与机器人单线和多线一起工作。我的方法有这个参数 method("Num1,Num2\nNum1,Num2) 因为它支持代码中的多行。
    • @JavierJerez 您可以使用.split("\n") 并分别解析每一行。
    【解决方案4】:

    您可以使用正则表达式提取这两个数字,然后检查该数字的最大条件。

    String regex = "^(-?\\d+),(-?\\d+)$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input); // input as 1,4
    
    if (matcher.find()) {
        int num1 = matcher.group(1));
        int num2 = matcher.group(2));
        
        if (num1 == id.size()) {
            // some logic
        }
        
        // some more logic
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多