如何检查一个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);