Подтвердить что ты не робот

Как проверить, начинается ли строка с одного из нескольких префиксов?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Никто не упоминал Stream до сих пор, так вот:

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Использование списка и запускается с помощью()

Одним из решений было бы поместить все префиксы в список, а затем использовать метод 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 ...
}

Ответ 8

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

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