¿Cómo verificar si una cadena comienza con uno de varios prefijos?

Tengo la siguiente statement if:

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

Quiero que incluya startsWith ‘Mon’ ‘Tues’ ‘Weds’ ‘Thrus’ ‘Friday’, etc. ¿Hay alguna manera simple de hacerlo cuando se usan cadenas? Intenté ‘||’ pero no funcionó …

¡Gracias!

Quieres decir:

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

o puede usar expresiones regulares:

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

Además de las soluciones presentadas, puedes usar la biblioteca Apache Commons Lang:

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

Nadie mencionó a Stream hasta ahora, así que aquí está:

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

Una solución simple es:

 if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed")) // ... you get the idea ... 

Una solución más elegante sería:

 List days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"); String day = newStr4.substring(0, 3).toUpperCase(); if (days.contains(day)) { // ... } 

Por supuesto, tenga en cuenta que su progtwig solo será útil en países de habla inglesa si detecta las fechas de esta manera. Es posible que desee considerar:

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

Desde allí, puede usar .startsWith o .matches o cualquier otro método que otros hayan mencionado anteriormente. De esta forma, obtienes la configuración regional predeterminada para jvm. Siempre puede pasar la configuración regional (y tal vez la configuración predeterminada del sistema si es nula) para ser más robusto.

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

Necesita incluir todo str.startsWith(otherStr) para cada elemento, ya que || solo funciona con expresiones booleanas (verdaderas o falsas).

Hay otras opciones si tiene que controlar muchas cosas, como las expresiones regulares , pero tienden a ser más lentas y las expresiones regulares más complicadas son generalmente más difíciles de leer.

Una expresión regular de ejemplo para detectar abreviaturas de nombre de día sería:

 if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) { 

Cuando dices que trataste de usar O, ¿cómo exactamente lo intentaste y usaste? En su caso, lo que tendrá que hacer sería algo así:

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

Usar una lista e startsWithAny ()

Una de las soluciones sería poner todos los prefijos en una lista , luego usar el método StringUtils startsWithAny () para hacer la verificación por usted.

 List prefixesList = Arrays.asList("Mon", "Tues", "Wed", "Thurs", "Fri"); if(StringUtils.startsWithAny(newStr4, prefixesList.toArray(new String[0]))) { // Your code goes here ... }