Ответ 1
Вы имеете в виду это:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
Или вы можете использовать регулярное выражение:
if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
У меня есть следующее выражение if:
String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
str4.add(newStr4);
}
Я хочу, чтобы он включал startsWith
Mon
Tues
Weds
Thurs
Friday
и т.д. Есть ли простой способ для этого при использовании строк? Я попробовал ||
, но это не сработало.
Вы имеете в виду это:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
Или вы можете использовать регулярное выражение:
if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
Помимо уже представленных решений, вы можете использовать библиотеку 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)))
Простое решение:
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)) {
// ...
}
Конечно, помните, что ваша программа будет полезна только в англоговорящих странах, если вы обнаружите даты таким образом. Вы можете подумать:
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)
для каждого элемента, так как ||
работает только с булевыми выражениями (true или false).
Существуют и другие варианты, если у вас есть много вещей, чтобы проверить, например регулярные выражения, но они, как правило, медленнее и сложнее выражения, как правило, труднее читать.
Пример регулярного выражения для определения сокращений имени дня:
if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
Одним из решений было бы поместить все префиксы в список, а затем использовать метод 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 ...
}
Когда вы говорите, что пытались использовать OR, как именно вы пытались его использовать? В вашем случае то, что вам нужно сделать, будет примерно таким:
String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);