source

구분 기호로 점이 있는 문자열 분할

gigabyte 2022. 9. 16. 23:06
반응형

구분 기호로 점이 있는 문자열 분할

는 '나'의 문자열을 궁금하다..바른방??? ??는 '비슷하다'입니다

String[] fn = filename.split(".");
return fn[0];

끈의 첫 부분만 필요하기 때문에 첫 번째 아이템을 반품합니다.에서 API가 ..어떤 캐릭터든 의미하니까 난 갇혔어

split() 정규..regex로 .들면 다음과 같습니다.

String[] fn = filename.split("\\."); 
return fn[0];

여기에는 해결 방법만 표시되며 문제에 대한 자세한 설명은 표시되지 않아 이 답변을 게시하기로 했습니다.

문제

은 이 에 대해 몇 .text.split(delim)split★★★★

  1. 는 분할할 딜리미터를 설명하는 인수 정규식(regex)으로 받아들입니다.
  2. delimtext를 들면a,b,c,,(는 ('delimiter')입니다,split에 '배열하다'와 같은 .["a" "b" "c" "" ""]그러나 대부분의 경우 이러한 빈 문자열은 필요하지 않기 때문에 자동으로 제거됩니다.따라서문자열 후행 없이 다른 배열을 생성하여 반환합니다.

또한 점이 정규식특수 문자라는 도 알아야 합니다.임의의 문자나타냅니다(행 구분자는 제외합니다만, 이 문자는 다음과 같이 변경할 수 있습니다.Pattern.DOTALL

, , 예를 들어,"abc""." split will 서 method

  1. 을 만들다["" "" "" ""],
  2. 그러나 이 배열에는 빈 문자열만 포함되어 있고 모두 후행이므로 이전 두 번째 포인트에서와 같이 제거됩니다.

즉, 빈 어레이를 얻을 수 있습니다.[]빈 도 없기 에) 수 .fn[0]0으로 하다

솔루션

이 문제를 해결하려면 점을 나타내는 regex를 작성하기만 하면 됩니다. 위해서는 그 합니다.. 방법은 아마 '어느 정도'나 '어느 정도'를 사용하는 \(String에서는, 다음과 같이 기술할 필요가 있습니다)."\\"\해서 또 하나 돼요.\(미국의)

따라서 문제 해결 방법은 다음과 같습니다.

String[] fn = filename.split("\\.");

보너스

다른 방법으로도 이 점을 탈출할 수 있습니다.

  • 클래스 사용split("[.]")
  • 그것을 따옴표로 싸다. split("\\Q.\\E")
  • Pattern.LITERAL
  • '만들기'를 사용합니다.split(Pattern.quote("."))가 당신을 하겠습니다.regex의 경우

분할에서는 정규 표현을 사용합니다.여기서 '.'는 임의의 의미를 갖는 특수 문자입니다.실제로 '.' 문자와 일치시키려면 이 문자를 이스케이프해야 합니다.

String[] fn = filename.split("\\.");

(한쪽은 정규 표현에서 '.'를 이스케이프하고 다른 한쪽은 Java 문자열의 첫 번째 것을 이스케이프합니다.)

또한 fn[0]을 반환하는 것은 권장하지 않습니다.something.blabla.txt이 이름은 유효한 이름입니다.실제 파일명은 반환하지 않습니다.대신 다음을 사용하는 것이 좋습니다.

int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);

String #split(String) 메서드는 정규 표현을 사용합니다.정규 표현에서 "." 문자는 "모든 문자"를 의미합니다.이 동작을 회피하려면 , 「」를 이스케이프 합니다.

filename.split("\\.");

또는 문자 클래스에서 분할할 분할 메서드를 지시합니다.

filename.split("[.]");

문자 클래스는 문자의 집합입니다.글을 쓸 수 있다

filename.split("[-.;ld7]");

파일명은 "-", ".", ";", "l", "d" 또는 "7"마다 분할됩니다.문자 클래스 내에서 "."는 특수 문자("메타 문자")가 아닙니다.

DOT( . )는 특수문자로 간주되며 String 분할방식에서는 다음과 같은 정규표현이 필요합니다.

String[] fn = filename.split("\\.");
return fn[0];

자바에서는 특수문자는 "\"로 이스케이프해야 하지만 자바에서는 "\"도 특수문자이므로 다른 "\"로 이스케이프해야 합니다.

String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));

사용하는 것이 더 효율적이지 않을까요?

 filename.substring(0, filename.indexOf("."))

첫 번째 점만 원하신다면요?

일반적으로 손으로 마스크를 벗기는 것은 좋지 않습니다.[ Pattern ]클래스에는 이 작업을 위한 메서드가 있습니다.

java.util.regex
static String quote(String s) 

분할이 정규식을 인수로 삼는 게 틀림없어...간단하게 변경"."로."\\."

나에게 효과가 있었던 솔루션은 다음과 같다.

String[] fn = filename.split("[.]");

주의: 이 스니펫은 점이 이스케이프된 후에도 더욱 주의해야 합니다!

filename 이 문자열 " . " 인 경우에도 fn은 0 이 되고 fn[0] 은 여전히 예외를 발생시킵니다.

이는 패턴이 적어도1회 일치할 경우 분할이 어레이에서 모든 후행 빈 문자열(따라서 도트 앞의 문자열도)을 폐기하고 빈 배열이 반환되기 때문입니다.

Apache Commons를 사용하면 가장 간단합니다.

File file = ...
FilenameUtils.getBaseName(file.getName());

또, 풀 패스에서 파일명을 추출합니다.

split정규식을 인수로서 받아들입니다.그러니 넌 합격해야 해"\."대신"."왜냐면"."는 regex의 메타문자입니다.

언급URL : https://stackoverflow.com/questions/3387622/split-string-with-dot-as-delimiter

반응형