programing

문자열이 여러 접두사 중 하나로 시작되는지 확인하려면 어떻게 해야 합니까?

minecode 2023. 1. 4. 20:17
반응형

문자열이 여러 접두사 중 하나로 시작되는지 확인하려면 어떻게 해야 합니까?

다음과 같은 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
}

업데이트: 어떤 시점에서 varargs가 도입되어 콜이 심플하게 되었습니다.

StringUtils.startsWithAny(newStr4, "Mon", "Tues",...)

지금까지 아무도 언급하지 않았습니다.다음은 예를 제시하겠습니다.

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

여기서 .starts를 사용할 수 있습니다.또는 .matchs 또는 위에서 언급한 다른 방법을 사용합니다.이렇게 하면 jvm의 기본 로케일을 얻을 수 있습니다.로케일을 항상 전달할 수도 있고(늘인 경우 시스템 로케일로 기본 설정될 수도 있습니다).

이렇게 하면심플하고 깔끔합니다.

let newStr4 = strr.split("2012")[0];
if (['Mon', 'Tues', 'Weds', 'Thurs', 'Friday'].some(word => newStr4.startsWith(word))) {
    str4.add(newStr4);
}
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)

전체를 포함시켜야 합니다.str.startsWith(otherStr)각 항목에 대해서, 그 이후||는 부울식(true 또는 false)에서만 작동합니다.

체크할 것이 많은 경우에는 정규 표현과 같이 다른 선택사항이 있지만, 그것들은 더 느리고 복잡한 정규 표현은 일반적으로 읽기 어렵습니다.

day name 약어를 검출하기 위한 정규 표현의 예는 다음과 같습니다.

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

불러stream() 요소 목록이 이미 있는 경우 목록 자체에서 다음을 수행합니다.

List<String> myItems = Arrays.asList("a", "b", "c");

다음과 같이 합니다.

boolean result = myItems.stream().anyMatch(s -> newArg4.startsWith(s));

사용하는 대신Stream.of...

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

반응형