2016-12-06 5 views
-2

文字列に十分なトークンがあるかどうかのブール型を返す関数を作成しています。私はこのコードを使ってこれを行います:NoSuchElementExceptionをキャッチするにはどうすればよいですか?

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

     } 
    } 

問題は、私はどのようにNo要素の例外をキャッチするかを考え出していないということです。私はそれが超簡単だと思うが、それをやる方法をまだ分かっていなかった。

ありがとうございました。

+0

コーダはごくわずかです。言い換えれば、「この単純な方法をコードしてください。」誰かがいるかもしれないが、何かを試してみると、それ以上のものが得られるだろう。 – duffymo

+0

私は分かりませんが、これはうまくいくのでしょうか? catch(NoSuchElementException e){戻り値は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; 
     } 
    } 

エラーがあるかどうかはわかりませんが、テストしたところ、これは機能します。