문자열이 특정 패턴으로 끝나는 지 확인
다음과 같은 문자열이있는 경우 :
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
'programing' 카테고리의 다른 글
PHP-오버로드 된 속성의 간접 수정 (0) | 2021.01.17 |
---|---|
Oracle에서 구체화 된 뷰를 새로 고치는 방법 (0) | 2021.01.17 |
C #을 사용하여 자체 서명 된 인증서를 만드는 방법은 무엇입니까? (0) | 2021.01.17 |
Haskell의 의존성 주입 : 관용적으로 작업 해결 (0) | 2021.01.17 |
인증서의 공개 키를 .pem 형식으로 저장하는 방법 (0) | 2021.01.17 |