【问题标题】:write a program to mask the charters to before the range and after the range编写一个程序来将章程屏蔽到范围之前和范围之后
【发布时间】:2014-04-10 19:07:43
【问题描述】:

我想输入一个像 ciphercloud 这样的字符串,范围是 3 到 6,然后它会显示为 pher***。只有当您将范围作为字符给出时,范围才必须是整数从不接受,范围也必须是正整数,不能是负数。 通过满足所有这些我这样编码

class maskchar
{
    public static void main(String args[])
    {
        String str = args[0];
        int start = Integer.parseInt(args[1]);
        int end = Integer.parseInt(args[2]);
        char[] str1 = str.toCharArray();
        int len = str1.length;
        if((start >= 0 && start <= len) && (end >= 0 && end <= len))
        {
            for(int i = 0; i < start - 1; i++)
            {
                System.out.print("*");
            }
            for(int j = start - 1; j < end; j++)
            {
                System.out.print(str1[j]);
            }
            for(int k = end; k < len; k++)
            {
                System.out.print("*");
            }
        }
    }
}

每当我们运行此代码时,它都会显示预期的输出,但如果我将字符作为起始范围传递,它将通过异常,即 NumberFormatException 我如何处理该异常以及如何使其更灵活。

【问题讨论】:

  • 它显然会抛出一个NumberFormatException,因为你在一个字符上调用了parseInt函数(这显然不是一个int)。如果要使用字符,则需要捕获异常并假设它已接收到字符,或者在调用parseInt 函数之前确定参数是否为整数。
  • @ifLoop 编码风格是主观的,没有对错之分。不要编辑人们的帖子以根据您的个人喜好更改编码样式。你的修改不应该被批准,所以我会回滚。
  • @Alex K。如果您以后坚持要进行编辑审核,请阅读上述评论。
  • @Dhara 如果您以后坚持要进行编辑审核,请阅读以上评论。
  • @Ashwini Agarwal 如果您以后坚持要进行编辑审核,请阅读以上评论。

标签: java


【解决方案1】:

它会抛出NumberFormatException,因为您正试图将一个字符解析为整数类型。为避免这种情况,您可以使用getClass().getName() 方法检查输入的类型,以使用if 条件检查类型,如this question 所示,并且仅当它是整数时才将其解析为整数。

您也可以使用简单的try-catch 捕获 NumberFormatException 并打印一条好的错误消息。

【讨论】:

    【解决方案2】:

    问: 我该如何处理该异常
    答:使用try-catch-block


    问: 我怎样才能使它更灵活。
    答:我建议添加在开始时进行一些合理性检查,例如:

    • 检查是否传递了三个参数
    • 检查start位置和end位置

      String str   = "";
      int    start = 0;
      int    end   = 0;
      
      try {
          if (args.length < 3) {
              throw new IllegalArgumentException("Please enter the right number of arguements");
          }
          str   = args[0];
          start = Integer.parseInt(args[1]);
          end   = Integer.parseInt(args[2]);
      
          if (start < 0     || start > str.length() ||
              end   < start || end   > str.length()) {
              throw new IllegalArgumentException("Please enter valid values for <start> and <end>");
          }                
      } catch (NumberFormatException e) {
          System.out.printf("Please enter a vaild");
      }
      
      char[] str1  = str.toCharArray();
      int    len   = str1.length;
      

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多