Java 当string.lenght()为0时,将引发异常

Java 当string.lenght()为0时,将引发异常,java,string,exception,Java,String,Exception,我需要解决以下问题: 在本练习中,您将创建两个处理异常的方法。其中一个方法是main()方法,它将调用另一个方法 如果在另一个方法中抛出异常,main()必须处理它。将包含一条finally语句,表示程序已完成。main()将调用的方法将命名为reverse,它将反转字符串中字符的顺序。如果字符串不包含任何字符,则reverse会将异常传播到main()方法 创建一个名为Propagate的类和一个main()方法,该方法暂时保持为空 创建一个名为reverse的方法。它接受字符串的参数,并返回

我需要解决以下问题:

在本练习中,您将创建两个处理
异常的方法。其中一个方法是
main()
方法,它将调用另一个方法

如果在另一个方法中抛出异常,
main()
必须处理它。将包含一条
finally
语句,表示程序已完成。
main()
将调用的方法将命名为
reverse
,它将反转
字符串中字符的顺序。如果
字符串
不包含任何字符,则reverse会将异常传播到
main()
方法

  • 创建一个名为
    Propagate
    的类和一个
    main()
    方法,该方法暂时保持为空
  • 创建一个名为
    reverse
    的方法。它接受
    字符串的参数
    ,并返回
    字符串
  • reverse
    中,使用
    String.length()
    方法检查
    字符串的长度是否为0。如果长度为0,则
    reverse
    方法将抛出异常
  • 现在,包括颠倒
    字符串
    顺序的代码。因为这不是本章的主要主题,所以提供了反转代码,但是您可以自己尝试

    字符串reverseStr=“”; 对于(int i=s.length()-1;i>=0;--i){ reverseStr+=s.charAt(i);} 反向返回

  • 现在在
    main()
    方法中,您将尝试调用此方法并处理任何潜在的异常。此外,还将包括一个
    finally
    语句,该语句在
    main()
    完成时显示

  • 问题是,即使
    String.length()
    为0,也不会引发异常:

    import java.util.*;
    import java.util.Scanner;
    import java.lang.IllegalArgumentException;
    
    public class TryAndCatch {
        public static void main(String[] args) {
            Scanner keyboard = new Scanner(System.in);
            System.out.print("Enter: ");
            String entry = keyboard.next();
            try {
                if (entry.length() == 0) {
                }
            }
    
            catch (IllegalArgumentException e) {
                System.err.println("String can't have 0 characters: " + e.getMessage());
    
            }
            System.out.println("The reverse String is : " + TryAndCatch.reverse(entry));
    
            keyboard.close();
        }
    
        static String reverse(String text) {
    
            String reverseString = "";
    
            for (int i = text.length() - 1; i >= 0; i--) {
    
                reverseString += text.charAt(i);
    
            }
    
            return reverseString;
        }
    
    }
    

    试试这个。这应该给你一个例外

    public static void main(String[] args) throws Exception {
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Enter: ");
        String entry = keyboard.nextLine();
        keyboard.close();
        if (entry.length() == 0) {
            throw new Exception("Exception Found");
        }
        else {
            String reverse = reverse(entry);
            if (reverse.length() == 0) {
                throw new Exception("Exception Found");                
            }
            else {
                // Do your Code                
                System.out.println(reverse);
            }
        }
    }
    
    static String reverse(String text) {
        String reverseString = "";
        for (int i = text.length() - 1; i >= 0; i--) {
            reverseString += text.charAt(i);
        }
        return reverseString;
    }
    

    并使用nextLine()而不是next()

    上述答案很有帮助,但需要将异常从反向方法传播到主方法

    package exceptions.examples;
    
    public class Reverse {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub      
            
            String reverse = "", reversedString; 
            
            try {
                reversedString = reverseme(reverse);    
                System.out.println("Reversed String : "+reversedString );
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
            finally {
                System.out.println("Finished!");
            }
        }
        
        public static String reverseme(String reverse) throws IllegalArgumentException {
            
            String reversedString = ""; 
            if(reverse.length() == 0) {
                throw new IllegalArgumentException("Length cannot be zero!");
            }
            
            for(int i = reverse.length() - 1; i >= 0; i--) {
                reversedString += reverse.charAt(i);            
            }
                
            return reversedString;
            
        }
    
    }
    

    当然,不会引发异常。当
    entry.length()==0
    时,您的代码实际上什么也不做。启动应用程序时,它始终为0。异常不是
    String.length()
    的默认行为,您需要自己抛出它。在这种情况下,你可能不想反转它好吧,我从哪里开始?1.不应使用.next()而应使用.nextLine();2.字符串有一个.isEmpty()方法;3.这个练习从一开始就很糟糕(main()如何处理异常?);etc再次编写问题陈述。reverse函数必须抛出一个在main方法中捕获的异常。您也应该在异常发生之前关闭扫描仪。总的来说,这没什么大不了的,但如果该计划继续存在,这就不是一个好主意@阿克塞尔。更新。谢谢你的信息。