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.
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
Ich bin mir nicht sicher, aber würde das funktionieren? catch (NoSuchElementException e) {return false; } – TheLittleCoder
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