Как проверить, начинается ли строка с одного из нескольких префиксов? - PullRequest
92 голосов
/ 20 марта 2012

У меня есть следующее выражение if:

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

Я хочу, чтобы оно включало startsWith Mon Tues Weds Thrus Friday и т. Д. Есть ли простой способк этому при использовании строк?Я пытался ||, но это не сработало.

Ответы [ 8 ]

157 голосов
/ 20 марта 2012

Вы имеете в виду это:

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

Или вы можете использовать регулярное выражение:

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
41 голосов
/ 20 марта 2012

Помимо уже представленных решений, вы можете использовать библиотеку Apache Commons Lang:

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}
22 голосов
/ 03 марта 2016

Никто не упомянул Stream, поэтому вот оно:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
7 голосов
/ 20 марта 2012

Простое решение:

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)) {
    // ...
}
3 голосов
/ 20 марта 2012

Конечно, помните, что ваша программа будет полезна только в англоязычных странах, если вы определите даты таким образом.Возможно, вы захотите рассмотреть:

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

Оттуда вы можете использовать .startsWith или .matches или любой другой метод, который другие упоминали выше.Таким образом, вы получите локаль по умолчанию для jvm.Вы всегда можете передать языковой стандарт (и, возможно, установить его по умолчанию на системный языковой стандарт, если он нулевой), а также быть более устойчивым.

1 голос
/ 21 марта 2018

Использование списка и setsWithAny ()

В одном из решений можно поместить все префиксы в List , а затем использовать StringUtils startWithAny.() способ сделать проверку за вас.

List<String> prefixesList = Arrays.asList("Mon", "Tues", "Wed", "Thurs", "Fri");
if(StringUtils.startsWithAny(newStr4, prefixesList.toArray(new String[0])))
{
    // Your code goes here ...
}
1 голос
/ 20 марта 2012
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)

Вам необходимо включить целое str.startsWith(otherStr) для каждого элемента, поскольку || работает только с логическими выражениями (true или false).

Существуют и другие варианты, если вам нужно много чего проверить, например регулярные выражения , но они, как правило, медленнее, а более сложные регулярные выражения обычно труднее читать.

Примером регулярного выражения для обнаружения сокращений названий дней будет:

if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
0 голосов
/ 20 марта 2012

Когда вы говорите, что пытались использовать ИЛИ, как именно вы пытались использовать его?В вашем случае то, что вам нужно будет сделать, будет выглядеть примерно так:

String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...