2016-12-06 3 views
-2

Ich mache eine Funktion, die einen booleschen Typ zurückgibt, ob ein String genug Tokens hat. Ich tue dies, indem Sie diesen Code verwenden:Wie kann ich eine NoSuchElementException abfangen?

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

     } 
    } 

Das Problem ist, dass ich nicht herausgefunden haben, wie man ein solches Element Ausnahme zu fangen. Ich denke, es ist super einfach, aber immer noch nicht herausgefunden, wie es geht.

Danke, jede Hilfe wird geschätzt werden !!!

+0

Sehr wenig Coder. Mit anderen Worten: "Bitte kodiere diese einfache Methode für mich." Jemand könnte es, aber Sie werden mehr davon haben, wenn Sie etwas versuchen. – duffymo

+0

Ich bin mir nicht sicher, aber würde das funktionieren? catch (NoSuchElementException e) {return false; } – TheLittleCoder

+0

Die JVM ist dein Freund. Sie können kein Programmierer werden, wenn Sie so ängstlich sind. Führen Sie den Code aus. sehen Sie, ob es Ihren Anforderungen entspricht. Wenn nicht, beheben Sie es, bis es funktioniert. Hier ist ein Hinweis: Zu keinem Zeitpunkt vergleichen Sie die Anzahl der Token, die Sie bekommen, mit dem übergebenen Wert. Die Ausnahme wird niemals ausgelöst, bis Sie die Anzahl der Token iterieren. Es gibt auch eine countTokens-Methode, die für Sie von Interesse sein könnte. – duffymo

Antwort

0

Hier ist, wie ich es tun könnte. Nicht das, was Sie vorhatten, aber ich wollte Ihnen JUnit zeigen.

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)); 
    } 
} 

Es ist keine gute Idee, Ausnahmen für die Programmlogik zu verwenden.

StringTokenizer ist eine JDK 1.0 Vintage-Klasse. Es hat den Test der Zeit bestanden, aber ich würde den ganzen Weg zurück zu 1995 nicht empfehlen.

+0

Danke du Duffymo, dass du mir von der countTokens() Methode erzählst! Ich wusste es wirklich nicht! – TheLittleCoder

0

Ich denke, dass ich die Antwort auf meine eigene Frage fand! Ich habe rumgespielt und danke, dass du mich über die Funktion countTokens() informiert hast.

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; 
     } 
    } 

Ich weiß nicht, ob es einen Fehler gibt, aber bis jetzt, als ich es getestet habe, funktioniert es!

Verwandte Themen