【问题标题】:Finding Correct exception to catch找到要捕获的正确异常
【发布时间】:2014-03-19 11:21:03
【问题描述】:

我可以使用哪个异常来检查输入是否包含正确数量的“/” 输入应该像 DD/MM/YYYY

try{
                String str = text.getText();
                StringTokenizer st = new StringTokenizer(str);
                String DD = st.nextToken("/");
                String MM = st.nextToken("/");
                String YYYY = st.nextToken();
}
catch( ???){

}

【问题讨论】:

  • 何不试试看呢?
  • 你真的需要例外来检查吗?
  • 在 C# 中,您可以捕获基类 Exception 并使用断点查看它实际上是什么类型。我假设使用 Java 也可以做到这一点
  • 那个例外是StringDoesNotContainRightNumberOfSlashException
  • 来自JavaDoc for StringTokenizer StringTokenizer 是一个遗留类,出于兼容性原因,尽管不鼓励在新代码中使用它。 所以答案是不要捕获任何异常,重写你的代码。在这种情况下,您似乎正在解析日期,所以为什么不使用 correct approach

标签: java string exception try-catch throw


【解决方案1】:

你会在 nextToken 的 javadoc 中找到它。 它说当没有更多令牌时它会抛出 NoSuchElementException。

也就是说您最好不要使用 try/catch,而是使用 hasMoreTokens 方法对其进行测试。

【讨论】:

  • 正如蜘蛛鲍里斯所指出的,使用 DateFormat 方法会更好。
【解决方案2】:

您可以为此使用 Custom Exception,但为此您需要声明 method 来验证您的日期(斜线数量)。

这样试试

   public class Demo
      {


  public static void main (String[] args) {

      try {
        new MyClass().metToValidate("01/12/2014");
          } catch (A e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
          }

      }

}
class A extends Exception{}


class MyClass{
      public void metToValidate(String dateText) throws A{


                if( dateText.charAt(2) == '/'&& dateText.charAt(5) == '/' )
                    System.out.println("DATE IS OK"); 

                else
                    throw new A();
      }
    }

【讨论】:

  • +1,但您可以提供可执行的示例……那会是更好的答案。
  • 编辑总是在那里 :) 并且 OP 正在等待,而不是我 ;)
  • ^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8]) 这个正则表达式可以完成这项工作。这接受带有闰年的 dd/MM/yyyy,有效年份:从 1600 到 9999
【解决方案3】:

nextToken 抛出的异常是 NoSuchElementException。

【讨论】:

    【解决方案4】:
                String str = "12/21223";
                int counter = 0;
                for( int i=0; i<str.length(); i++ ) {
                    if( str.charAt(i) == '/' ) {
                        counter++;
                    } 
                }
                if(counter == 3){
                    StringTokenizer st = new StringTokenizer(str);
                    String DD = st.nextToken("/");
                    String MM = st.nextToken("/");
                    String YYYY = st.nextToken();
                    System.out.println(str);
                }else{
                    System.out.println("Exception");
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多