【问题标题】:How do I catch a NoSuchElementException?如何捕获 NoSuchElementException?
【发布时间】:2016-12-06 23:31:30
【问题描述】:

我正在制作一个函数,它返回一个布尔类型的字符串是否有足够的标记。我通过使用以下代码来做到这一点:

public boolean isEnoughTokens(int tokens, String problem) {
        try {
            StringTokenizer token = new StringTokenizer(problem);
            return true;
        } catch (NoSuchElementException ) {

        }
    }

问题是我还没有弄清楚如何捕获 No such element 异常。我觉得超级简单,但还是不知道怎么做。

谢谢,任何帮助将不胜感激!!!

【问题讨论】:

  • 非常小的编码器。换句话说,“请为我编写这个简单的方法。”有人可能会这样做,但如果你尝试一些东西,你会从中得到更多。
  • 我不确定,但这行得通吗?捕捉(NoSuchElementException e){返回假; }
  • JVM 是你的朋友。胆小是不可能成为程序员的。运行代码;看看它是否符合您的要求。如果没有,请修复它,直到它出现为止。这里有一个提示:你永远不会比较你得到的令牌数量和你传入的值。在你迭代令牌数量之前,永远不会抛出异常。还有一个您可能感兴趣的 countTokens 方法。
  • 这里还有一个提示:学习如何使用 JUnit 来测试您的方法和类。你的方法有很多可能性。你可以用一个好的单元测试类来测试它们。

标签: java function nosuchelementexception


【解决方案1】:

我可以这样做。不是你想的那样,但我想告诉你JUnit

StringUtils.java:

package utils;

import java.util.Arrays;
import java.util.List;

/**
 * @author Michael
 * @link https://stackoverflow.com/questions/41006856/how-do-i-catch-a-nosuchelementexception?noredirect=1#comment69222264_41006856
 */
public class StringUtils {

    private StringUtils() {}

    public static List<String> tokenize(String str) {
        String [] tokens = new String[0];
        if (isNotBlankOrNull(str)) {
            str = str.trim();
            tokens = str.split("\\s+");
        }
        return Arrays.asList(tokens);
    }

    public static boolean isBlankOrNull(String s) {
        return ((s == null) || (s.trim().length() == 0));
    }

    public static boolean isNotBlankOrNull(String s) {
        return !isBlankOrNull(s);
    }

    public static boolean hasSufficientTokens(int numTokens, String str) {
        return (numTokens >= 0) && tokenize(str).size() >= numTokens;
    }
}

StringUtilsTest.java:

package utils;

import org.junit.Assert;
import org.junit.Test;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * Created by Michael
 * Creation date 12/6/2016.
 * @link https://stackoverflow.com/questions/41006856/how-do-i-catch-a-nosuchelementexception?noredirect=1#comment69222264_41006856
 */
public class StringUtilsTest {

    @Test
    public void testIsNotBlankOrNull_NullString() {
        Assert.assertFalse(StringUtils.isNotBlankOrNull(null));
    }

    @Test
    public void testIsNotBlankOrNull_EmptyString() {
        Assert.assertFalse(StringUtils.isNotBlankOrNull(""));
    }

    @Test
    public void testIsNotBlankOrNull_BlankString() {
        Assert.assertFalse(StringUtils.isNotBlankOrNull("        "));
    }

    @Test
    public void testIsNotBlankOrNull_FullString() {
        Assert.assertTrue(StringUtils.isNotBlankOrNull("I'm not null, blank, or empty"));
    }

    @Test
    public void testTokenize_NullString() {
        // setup
        List<String> expected = Collections.EMPTY_LIST;
        // exercise
        List<String> actual = StringUtils.tokenize(null);
        // assert
        Assert.assertEquals(expected, actual);
    }

    @Test
    public void testTokenize_EmptyString() {
        // setup
        List<String> expected = Collections.EMPTY_LIST;
        // exercise
        List<String> actual = StringUtils.tokenize("");
        // assert
        Assert.assertEquals(expected, actual);
    }

    @Test
    public void testTokenize_BlankString() {
        // setup
        List<String> expected = Collections.EMPTY_LIST;
        // exercise
        List<String> actual = StringUtils.tokenize("        ");
        // assert
        Assert.assertEquals(expected, actual);
    }

    @Test
    public void testTokenize_FullString() {
        // setup
        List<String> expected = Arrays.asList("I'm", "not", "null,", "blank,", "or", "empty");
        // exercise
        List<String> actual = StringUtils.tokenize("    I'm not     null,    blank, or empty    ");
        // assert
        Assert.assertEquals(expected.size(), actual.size());
        Assert.assertEquals(expected, actual);
    }

    @Test
    public void hasSufficientTokens_NegativeTokens() {
        // setup
        int numTokens = -1;
        String str = "    I'm not     null,    blank, or empty    ";
        // exercise
        // assert
        Assert.assertFalse(StringUtils.hasSufficientTokens(numTokens, str));
    }

    @Test
    public void hasSufficientTokens_InsufficientTokens() {
        // setup
        String str = "    I'm not     null,    blank, or empty    ";
        int numTokens = StringUtils.tokenize(str).size() + 1;
        // exercise
        // assert
        Assert.assertFalse(StringUtils.hasSufficientTokens(numTokens, str));
    }

    @Test
    public void hasSufficientTokens_NullString() {
        // setup
        String str = "";
        int numTokens = StringUtils.tokenize(str).size();
        // exercise
        // assert
        Assert.assertTrue(StringUtils.hasSufficientTokens(numTokens, str));
    }

    @Test
    public void hasSufficientTokens_Success() {
        // setup
        String str = "    I'm not     null,    blank, or empty    ";
        int numTokens = StringUtils.tokenize(str).size();
        // exercise
        // assert
        Assert.assertTrue(StringUtils.hasSufficientTokens(numTokens, str));
    }
}

对程序逻辑使用异常不是一个好主意。

StringTokenizer 是 JDK 1.0 老式类。它经受住了时间的考验,但我不建议一直回到 1995 年。

【讨论】:

  • 感谢 duffymo 告诉我有关 countTokens() 方法的信息!我真的不知道!
【解决方案2】:

我想我找到了自己问题的答案!我在胡闹,感谢你告诉我 countTokens() 函数我想出了这个!

public boolean isEnoughTokens(int tokens, String problem) {
        try {
            StringTokenizer token = new StringTokenizer(problem);
            if (token.countTokens() == tokens) {
                return true;
            }
            else {
                return false;
            }
        } catch (NoSuchElementException e) {
            return false;
        }
    }

我不知道是否有任何错误,但到目前为止,当我测试它时,它可以工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多