我有以下 if 陈述:
String newStr4 = strr.split("2012")[0]; if (newStr4.startsWith("Mon")) { str4.add(newStr4); }
我想它包括 startsWith Mon Tues Weds Thurs Friday等。在使用字符串时,有没有一种简单的方法可以做到这一点?我试过 ||,但没用。
startsWith
Mon
Tues
Weds
Thurs
Friday
||
一个简单的解决办法是:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed")) // ... you get the idea ...
一个更好的解决办法是:
List<String> days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"); String day = newStr4.substring(0, 3).toUpperCase(); if (days.contains(day)) { // ... }
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)
您需要为每个项目包含整个 str.startsWith(otherStr),因为 ||只能处理布尔表达式(true 或 false)。
str.startsWith(otherStr)
如果有很多东西需要检查,还有其他选项,比如 正则表达式,但是它们往往比较慢,而且更复杂的正则表达式通常更难读。
用于检测日名缩写的正则表达式示例如下:
if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
当你说你试图使用手术室的时候,你到底是怎么使用它的?在你的情况下,你需要做的事情是这样的:
String newStr4 = strr.split("2012")[0]; if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...) str4.add(newStr4);
你是说:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
Or you could use regular expression:
if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
除了已经提供的解决方案之外,您还可以使用 Apache Commons Lang 库:
if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) { //whatever }
更新: 在某些时候引入 varargs 使得调用变得更加简单:
StringUtils.startsWithAny(newStr4, "Mon", "Tues",...)
当然,请注意,如果你用这种方式检测日期,你的程序只有在英语国家才有用。你可以考虑一下:
Set<String> dayNames = Calendar.getInstance() .getDisplayNames(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault()) .keySet();
从那里你可以使用。开始于或者。匹配或任何其他方法,其他人提到了上述。通过这种方式,您可以获得 jvm 的默认语言环境。您总是可以传递区域设置(如果它为 null,则可能默认为系统区域设置) ,以便更加健壮。
到目前为止还没有人提到 Stream,所以这里是:
Stream
if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
就是 更简单和 更整洁这样:
let newStr4 = strr.split("2012")[0]; if (['Mon', 'Tues', 'Weds', 'Thurs', 'Friday'].some(word => newStr4.startsWith(word))) { str4.add(newStr4); }
如果您已经有一个元素列表,请调用 stream() on the list itself:
stream()
List<String> myItems = Arrays.asList("a", "b", "c");
像这样:
boolean result = myItems.stream().anyMatch(s -> newArg4.startsWith(s));
而不是使用 Stream.of...
Stream.of...
如果任务是检查字符串是否匹配忽略大小写的多个值中的任何一个,则有两个选项:
dejvuth
if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri") .anyMatch(s -> StringUtils.startsWithIgnoreCase(newStr4, s)));
根据 StringUtils 中的实现使用以下方法:
public static boolean startsWithAnyIgnoreCase( CharSequence sequence, CharSequence... searchStrings) { if (!isEmpty(sequence) && !ArrayUtils.isEmpty(searchStrings)) { CharSequence[] searchStringsArray = searchStrings; int length = searchStrings.length; for (int i = 0; i < length; ++i) { CharSequence searchString = searchStringsArray[i]; if (startsWithIgnoreCase(sequence, searchString)) { return true; } } } return false; }