如何检查字符串是否以多个前缀之一开头?

时间:2012-03-20 16:11:42

标签: java string if-statement expression

我有以下if语句:

String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
    str4.add(newStr4);
}

我希望它包含startsWith Mon Tues Weds Thrus Friday等。使用字符串时是否有一种简单的方法?我试过了||,但它没有用。

9 个答案:

答案 0 :(得分:154)

你的意思是:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)

或者您可以使用正则表达式:

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))

答案 1 :(得分:41)

除了已经提供的解决方案,您还可以使用Apache Commons Lang库:

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}

答案 2 :(得分:21)

到目前为止,没有人提及Stream,所以这里是:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))

答案 3 :(得分:7)

一个简单的解决方案是:

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)) {
    // ...
}

答案 4 :(得分:3)

当然,请注意,如果您以这种方式检测日期,您的计划将仅适用于英语国家/地区。您可能需要考虑:

Set<String> dayNames = Calendar.getInstance()
 .getDisplayNames(Calendar.DAY_OF_WEEK,
      Calendar.SHORT,
      Locale.getDefault())
 .keySet();

从那里你可以使用.startsWith或.matches或其他人提到的其他方法。这样您就可以获得jvm的默认语言环境。您总是可以传入区域设置(如果它为null,则可以将其默认为系统区域设置)以及更强大。

答案 5 :(得分:1)

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)) {

答案 6 :(得分:0)

当您说您尝试使用OR时,您是如何尝试使用它的?在你的情况下,你需要做的事情是这样的:

String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);

答案 7 :(得分:0)

使用List和startsWithAny()

解决方案是将所有前缀放入列表,然后使用 StringUtils startsWithAny()方法进行检查对你而言。

List<String> prefixesList = Arrays.asList("Mon", "Tues", "Wed", "Thurs", "Fri");
if(StringUtils.startsWithAny(newStr4, prefixesList.toArray(new String[0])))
{
    // Your code goes here ...
}

答案 8 :(得分:0)

这样更简单更整洁

let newStr4 = strr.split("2012")[0];
if (['Mon', 'Tues', 'Weds', 'Thurs', 'Friday'].some(word => newStr4.startsWith(word))) {
    str4.add(newStr4);
}