【问题标题】:When string.lenght() is 0 throw an exception当 string.length() 为 0 时抛出异常
【发布时间】:2017-10-14 06:14:33
【问题描述】:

我有以下练习要解决:

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

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

  1. 创建一个名为 Propagate 的类和一个 main() 方法,该方法暂时为空。
  2. 创建一个名为reverse 的方法。它接受String 的参数并返回String
  3. reverse中,通过String.length()方法检查String的长度是否为0。如果长度为0,reverse方法会抛出异常。
  4. 现在包含颠倒String 顺序的代码。由于这不是本章的主题,所以提供了反转代码,您可以自己尝试。

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

  5. 现在在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;
    }

}

【问题讨论】:

  • 当然不会抛出异常。当entry.length() == 0 时,您的代码实际上什么都不做
  • 启动应用的时候总是0。
  • 异常不是String.length()的默认行为,需要自己抛出。在这种情况下你可能不想扭转它
  • 好的,我从哪里开始? 1. 你不应该使用 .next() 而应该使用 .nextLine(); 2. String 有一个 .isEmpty() 方法; 3.练习一开始就不好(main()如何处理异常?);等等等等
  • 再次阅读问题陈述。 reverse 函数必须抛出一个在 main 方法中捕获的异常。

标签: java string exception


【解决方案1】:

上面的答案很有帮助,但是异常需要从反向方法传播到主要方法。

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;
        
    }

}

【讨论】:

    【解决方案2】:

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

    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()

    【讨论】:

    • 您也应该在异常之前关闭扫描程序。主要是这样,这没什么大不了的,但是如果程序继续存在,那就不好了
    • 同意。 @AxelH。已更新。
    • 感谢您的信息。
    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 2014-12-12
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多