如何检查一个string是否以几个前缀之一开头?

如果我有以下陈述:

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

我想包括startsWith周一周一周二Weds Thrus星期五等。有没有一个简单的方法来使用string? 我试过'||' 但它没有工作…

谢谢!

你的意思是:

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

或者你可以使用正则expression式:

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

除了已经提供的解决scheme之外,您可以使用Apache Commons Lang库:

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

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

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

简单的解决scheme是:

 if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed")) // ... you get the idea ... 

一个更好的解决scheme是:

 List<String> days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"); String day = newStr4.substring(0, 3).toUpperCase(); if (days.contains(day)) { // ... } 

当然,如果你用这种方法检测date,请注意你的程序只会在说英语的国家有用。 你可能要考虑:

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

从那里你可以使用.startsWith或.matches或其他的方法,其他人已经在上面提到。 这样你就得到了jvm的默认语言环境。 你总是可以通过语言环境(也可以默认为系统语言环境,如果它是空的),以便更健壮。

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

自从||以来,您需要为每个项目包含整个str.startsWith(otherStr) 只适用于布尔expression式(true或false)。

还有其他的select,如果你有很多东西需要检查,比如正则expression式 ,但是它们往往比较慢,而更复杂的正则expression式通常比较难读。

检测date名称缩写的示例正则expression式是:

 if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) { 

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

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