当 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 时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章