2016-12-06 60 views
-2

我正在做一個函數,返回一個布爾類型是否有足夠的令牌。我這樣做使用此代碼:如何捕獲NoSuchElementException?

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

     } 
    } 

問題是,我還沒有想出如何捕獲一個沒有這樣的元素異常。我認爲這很簡單,但仍然沒有弄清楚如何去做。

謝謝,任何幫助將不勝感激!

+0

非常小的編碼器。換句話說,「請爲我編碼這個簡單的方法。」有人可能,但如果你嘗試一些,你會從中得到更多。 – duffymo

+0

我不確定,但會工作嗎? catch(NoSuchElementException e){return false; } – TheLittleCoder

+0

JVM是你的朋友。你不能因爲膽小而成爲程序員。運行代碼;看看它是否符合你的要求。如果沒有,修復它直到它。這裏有一個提示:在任何時候你都不會將你獲得的標記數量與你傳入的值進行比較。除非迭代了標記數量,否則絕不會拋出異常。還有一個你可能感興趣的countTokens方法。 – duffymo

回答

0

下面是我可能會這樣做的。不是你想到的,但我想告訴你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年。

+0

感謝您告訴我有關countTokens()方法的duffymo!我真的不知道! – TheLittleCoder

0

我想我找到了我自己的問題的答案!我在亂搞,並感謝你通知我有關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; 
     } 
    } 

我不知道是否有任何錯誤,但到目前爲止,當我測試它,它的工作原理!