我有以下 if 语句:
String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
str4.add(newStr4);
}
我希望它包含 startsWith
Mon
Tues
Weds
Thurs
Friday
等。使用字符串时有没有简单的方法?我尝试了 ||
,但没有成功。
"Mon||Tues"
等?还是您使用了 newStr4.startsWith("Mon")||newStr4.startsWith("Tues") ...
?无论哪种方式,请定义“它不起作用”。
你是这个意思吗:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
或者你可以使用正则表达式:
if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
除了已经提供的解决方案之外,您还可以使用 Apache Commons Lang 库:
if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
//whatever
}
更新:在某些时候引入可变参数使调用现在更简单:
StringUtils.startsWithAny(newStr4, "Mon", "Tues",...)
到目前为止没有人提到 Stream
,所以这里是:
if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
s -> newStr4.startsWith(s)
可以替换为 newStr7::startsWith
更清楚
一个简单的解决方案是:
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)) {
// ...
}
当然,请注意,如果您以这种方式检测日期,您的程序只会在英语国家/地区有用。您可能要考虑:
Set<String> dayNames = Calendar.getInstance()
.getDisplayNames(Calendar.DAY_OF_WEEK,
Calendar.SHORT,
Locale.getDefault())
.keySet();
从那里您可以使用 .startsWith 或 .matches 或其他人在上面提到的任何其他方法。这样您就可以获得 jvm 的默认语言环境。您始终可以传入语言环境(如果它为空,则可能将其默认为系统语言环境),以使其更加健壮。
这种方式更简单,更整洁:
let newStr4 = strr.split("2012")[0];
if (['Mon', 'Tues', 'Weds', 'Thurs', 'Friday'].some(word => newStr4.startsWith(word))) {
str4.add(newStr4);
}
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)
您需要为每个项目包含整个 str.startsWith(otherStr)
,因为 ||
仅适用于布尔表达式(true 或 false)。
如果您有很多东西要检查,还有其他选项,例如 regular expressions,但它们往往速度较慢,更复杂的正则表达式通常更难阅读。
用于检测日期名称缩写的示例正则表达式为:
if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
如果您已经有一个元素列表,请调用stream()
列表本身:
List<String> myItems = Arrays.asList("a", "b", "c");
像这样:
boolean result = myItems.stream().anyMatch(s -> newArg4.startsWith(s));
而不是使用 Stream.of...
当您说您尝试使用 OR 时,您究竟是如何尝试使用它的?在你的情况下,你需要做的是这样的:
String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);
不定期副业成功案例分享