当 string.length() 为 0 时抛出异常

Posted

技术标签:

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

我有以下练习要解决:

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

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

    创建一个名为 Propagate 的类和一个 main() 方法,该方法暂时为空。 创建一个名为reverse 的方法。它接受String 的参数并返回String。 在reverse中,通过String.length()方法检查String的长度是否为0。如果长度为0,reverse方法会抛出异常。

    现在包含颠倒String 顺序的代码。由于这不是本章的主题,所以提供了反转代码,您可以自己尝试。

    字符串 reverseStr = ""; for(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;
    


【问题讨论】:

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

以上是关于当 string.length() 为 0 时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库时间戳(6)转换为雪花timestamp_ntz时抛出错误

当搜索没有结果时抛出一个弹出窗口

GraphQL java:当请求有未使用的变量时抛出异常

当文件没有所需权限时抛出异常

PL/SQL 函数在执行时抛出进程内存错误

当 Jackcess 连接正常时,UCanAccess 驱动程序在尝试连接 Access 数据库时抛出异常