Ich habe die folgende if-Anweisung:
String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
str4.add(newStr4);
}
Ich möchte, dass es startsWith
Mon
Tues
Weds
Thrus
Friday
usw. enthält. Gibt es einen einfachen Weg, wenn Sie Strings verwenden? Ich habe ||
versucht, aber es hat nicht funktioniert.
Meinst du das:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
Oder Sie können regulären Ausdruck verwenden:
if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
Neben den bereits vorgestellten Lösungen können Sie die Bibliothek von Apache Commons Lang verwenden:
if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
//whatever
}
Niemand hat Stream
bisher erwähnt, also hier ist es:
if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
Eine einfache Lösung ist:
if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed"))
// ... you get the idea ...
Eine schickere Lösung wäre:
List<String> days = Arrays.asList("Sun", "MON", "TUE", "WED", "THU", "FRI", "SAT");
String day = newStr4.substring(0, 3).toUpperCase();
if (days.contains(day)) {
// ...
}
Seien Sie sich jedoch bewusst, dass Ihr Programm nur in englischsprachigen Ländern nützlich ist, wenn Sie auf diese Weise Termine feststellen. Vielleicht möchten Sie überlegen:
Set<String> dayNames = Calendar.getInstance()
.getDisplayNames(Calendar.DAY_OF_WEEK,
Calendar.SHORT,
Locale.getDefault())
.keySet();
Von dort aus können Sie .startsWith oder .matches oder eine andere Methode verwenden, die von anderen bereits erwähnt wurde. Auf diese Weise erhalten Sie das Standardgebietsschema für den jvm. Sie können immer das Gebietsschema übergeben (und möglicherweise das Standardgebietsschema, wenn es null ist), um robuster zu sein.
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)
Sie müssen das gesamte str.startsWith(otherStr)
für jedes Element angeben, da ||
nur mit booleschen Ausdrücken funktioniert (true oder false).
Es gibt andere Optionen, wenn Sie viele Dinge prüfen müssen, wie reguläre Ausdrücke , aber diese sind tendenziell langsamer und komplizierte reguläre Ausdrücke sind im Allgemeinen schwieriger zu lesen.
Ein regulärer Beispielausdruck zum Erkennen von Abkürzungen für Tagesnamen wäre:
if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
Eine der Lösungen wäre, alle Präfixe in eine List zu setzen und dann die StringUtils startsWithAny () - Methode zu verwenden, um die Überprüfung für Sie durchzuführen.
List<String> prefixesList = Arrays.asList("Mon", "Tues", "Wed", "Thurs", "Fri");
if(StringUtils.startsWithAny(newStr4, prefixesList.toArray(new String[0])))
{
// Your code goes here ...
}
Wenn Sie sagen, Sie haben versucht, OR zu verwenden, wie haben Sie es genau versucht und verwendet? In Ihrem Fall müssten Sie so etwas tun:
String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);