it-swarm.com.de

Wie prüfe ich, ob ein String mit einem von mehreren Präfixen beginnt?

Ich habe die folgende if-Anweisung:

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

Ich möchte, dass es startsWithMonTuesWedsThrusFriday usw. enthält. Gibt es einen einfachen Weg, wenn Sie Strings verwenden? Ich habe || versucht, aber es hat nicht funktioniert.

86
FredBones

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).*"))
147
hmjd

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
}
40
Thomas

Niemand hat Stream bisher erwähnt, also hier ist es:

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

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)) {
    // ...
}
7
Óscar López

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.

3
Matt
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)) {
1
Brendan Long

Verwenden einer Liste und startsWithAny ()

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 ...
}
0
Loukan ElKadi

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);
0
npinti