programing

문자열이 특정 패턴으로 끝나는 지 확인

copyandpastes 2021. 1. 17. 12:33
반응형

문자열이 특정 패턴으로 끝나는 지 확인


다음과 같은 문자열이있는 경우 :

This.is.a.great.place.too.work.

또는:

This/is/a/great/place/too/work/

내 프로그램이 그 문장이 유효하고 "일"이 있다는 것을 알려주는 것보다.

만약 내가 가지고 있다면 :

This.is.a.great.place.too.work.hahahha

또는:

This/is/a/great/place/too/work/hahahah

내 프로그램은 문장에 "작품"이 있다는 것을 알려주지 않아야합니다.

그래서 나는 감정의 끝에 단어를 찾기 위해 자바 문자열을 찾고 있습니다. , 또는 , 또는 / 앞에. 어떻게하면 되나요?


이것은 정말 간단합니다. String객체에는 endsWith메서드가 있습니다.

귀하의 질문에서 /, ,또는 .구분 기호 세트 를 원하는 것 같습니다 .

그래서:

String str = "This.is.a.great.place.to.work.";

if (str.endsWith(".work.") || str.endsWith("/work/") || str.endsWith(",work,"))
     // ... 

matches메서드와 매우 간단한 정규식을 사용 하여이 작업을 수행 할 수도 있습니다 .

if (str.matches(".*([.,/])work\\1$"))

[.,/]마침표, 슬래시 또는 쉼표 및 역 참조를 지정 하는 문자 클래스 사용, \1발견 된 대체 항목 중 일치하는 항목 (있는 경우).


문자열이 work로 끝나고 다음과 같이 한 문자가 오는지 테스트 할 수 있습니다 .

theString.matches(".*work.$");

후행 문자가 선택 사항 인 경우 다음을 사용할 수 있습니다.

theString.matches(".*work.?$");

마지막 문자가 마침표 .또는 슬래시 인지 확인하려면 /다음을 사용할 수 있습니다.

theString.matches(".*work[./]$");

테스트하기 위해 작업 다음 옵션 기간 또는 당신이 사용할 수있는 슬래시 :

theString.matches(".*work[./]?$");

마침표 또는 슬래시로 둘러싸인 작업 을 테스트하려면 다음을 수행하십시오.

theString.matches(".*[./]work[./]$");

작업 전후 토큰이 서로 일치해야하는 경우 다음을 수행 할 수 있습니다.

theString.matches(".*([./])work\\1$");

귀하의 정확한 요구 사항은 정확하게 정의되지 않았지만 다음과 같을 것이라고 생각합니다.

theString.matches(".*work[,./]?$");

다시 말해:

  • 0 개 이상의 문자
  • 다음 작업
  • 뒤에 0 개 또는 1 개의 , . OR /
  • 입력의 끝

다양한 정규식 항목에 대한 설명 :

.               --  any character
*               --  zero or more of the preceeding expression
$               --  the end of the line/input
?               --  zero or one of the preceeding expression
[./,]           --  either a period or a slash or a comma
[abc]           --  matches a, b, or c
[abc]*          --  zero or more of (a, b, or c)
[abc]?          --  zero or one of (a, b, or c)

enclosing a pattern in parentheses is called "grouping"

([abc])blah\\1  --  a, b, or c followed by blah followed by "the first group"

다음은 함께 놀 수있는 테스트 도구입니다.

class TestStuff {

    public static void main (String[] args) {

        String[] testStrings = { 
                "work.",
                "work-",
                "workp",
                "/foo/work.",
                "/bar/work",
                "baz/work.",
                "baz.funk.work.",
                "funk.work",
                "jazz/junk/foo/work.",
                "funk/punk/work/",
                "/funk/foo/bar/work",
                "/funk/foo/bar/work/",
                ".funk.foo.bar.work.",
                ".funk.foo.bar.work",
                "goo/balls/work/",
                "goo/balls/work/funk"
        };

        for (String t : testStrings) {
            print("word: " + t + "  --->  " + matchesIt(t));
        }
    }

    public static boolean matchesIt(String s) {
        return s.matches(".*([./,])work\\1?$");
    }

    public static void print(Object o) {
        String s = (o == null) ? "null" : o.toString();
        System.out.println(o);
    }

}

물론 StringTokenizer클래스를 사용 하여 문자열을 '.'로 분할 할 수 있습니다 . 또는 '/', 마지막 단어가 "work"인지 확인하십시오.


하위 문자열 방법을 사용할 수 있습니다.

   String aString = "This.is.a.great.place.too.work.";
   String aSubstring = "work";
   String endString = aString.substring(aString.length() - 
        (aSubstring.length() + 1),aString.length() - 1);
   if ( endString.equals(aSubstring) )
       System.out.println("Equal " + aString + " " + aSubstring);
   else
       System.out.println("NOT equal " + aString + " " + aSubstring);

I tried all the different things mentioned here to get the index of the "." character in a filename that ends with .[0-9][0-9]*, e.g. srcfile.1, srcfile.12, etc. Nothing worked. Finally, the following worked: int dotIndex = inputfilename.lastIndexOf(".");

Weird! This is with java -version openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.10.2-b11) OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

Also, the official Java doc page for regex (from which there is a quote in one of the answers above) does not seem to specify how to look for the "." character. Because ".", "\.", and "[.]" did not work for me, and I don't see any other options specified apart from these.

ReferenceURL : https://stackoverflow.com/questions/12310978/check-if-string-ends-with-certain-pattern

반응형