Programming

문자열이 여러 접두사 중 하나로 시작하는지 확인하는 방법은 무엇입니까?

procodes 2020. 8. 27. 22:22
반응형

문자열이 여러 접두사 중 하나로 시작하는지 확인하는 방법은 무엇입니까?


다음과 같은 if 문이 있습니다.

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

startsWith Mon Tues Weds Thrus 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)

부울 표현식 (true 또는 false)에서만 작동 str.startsWith(otherStr)하므로 각 항목에 대해 전체를 포함해야합니다 ||.

정규 표현식 과 같이 확인해야 할 사항이 많은 경우 다른 옵션이 있지만 더 느리고 복잡한 정규 표현식은 일반적으로 읽기가 더 어렵습니다.

요일 이름 약어를 감지하는 정규식의 예는 다음과 같습니다.

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

목록 및 startsWithAny () 사용

솔루션 중에는 모든 접두사를 List 에 넣은 다음 StringUtils startsWithAny () 메서드를 사용하여 검사를 수행하십시오.

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

참고 URL : https://stackoverflow.com/questions/9790584/how-to-check-if-a-string-starts-with-one-of-several-prefixes

반응형