첫 번째 인스턴스에서만 문자열 분리-Java


145

문자열을 '='문자로 나누고 싶습니다. 그러나 첫 번째 인스턴스에서만 분리하고 싶습니다. 어떻게해야합니까? 다음은 '_'char의 JavaScript 예제이지만 지정된 문자의 첫 번째 인스턴스에서만 문자열을 분할하면 작동하지 않습니다.

예 :

apple=fruit table price=5

String.split ( '=')을 시도하면; 그것은 준다

[apple],[fruit table price],[5]

하지만 난 필요해

[apple],[fruit table price=5]

감사


당신은 탈출 할 필요가 없습니다 =.
Rohit Jain

답변:


282
string.split("=", 2);

String.split(java.lang.String regex, int limit)설명 대로 :

이 메소드에 의해 돌려 주어지는 배열에는,이 식의 각 부분 캐릭터 라인이 포함됩니다. 배열의 하위 문자열은이 문자열에서 순서대로 나타납니다. 표현식이 입력의 일부와 일치하지 않으면 결과 배열에는 하나의 요소, 즉이 문자열 만 있습니다.

limit매개 변수는 패턴이 적용되는 횟수를 제어하므로 결과 배열의 길이에 영향을줍니다. 한계 n 이 0보다 크면 패턴이 최대 n -1 회까지 적용되며 배열의 길이는 n 보다 크지 않으며 배열의 마지막 항목은 마지막으로 일치 한 구분자를 초과하는 모든 입력을 포함합니다.

boo:and:foo예를 들어, string 은 다음 매개 변수를 사용하여 다음 결과를 생성합니다.

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }

1
이해하기가 혼란 스럽지만 작동합니다! 감사!
클린트 이스트우드

4
약간의 설명 : 한계 2는 AT MOST 2 요소의 목록을 반환합니다. 식과 일치하지 않으면 1 요소의 목록을 반환 할 수 있습니다. 식과 일치하는 항목이 2 개 있으면 반환 된 배열의 두 번째 요소가 분할되지 않습니다.
modle13


5

다른 많은 답변이 한계 접근 방식을 제안하므로 다른 방법이 될 수 있습니다

주어진 문자의 첫 번째 발생을 반환하는 String 에서 indexOf 메소드를 사용할 수 있습니다. 해당 인덱스를 사용하면 원하는 출력을 얻을 수 있습니다

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
이것은 분할되지 않지만 두 번째 부분을 추출합니다. 첫 번째 부분
Clint Eastwood

0

이 코드를 사용해보십시오 ...

작동합니다.

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}

0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

기본적으로 split 방법은 주어진 정규식을 기준으로 n 개의 배열을 만듭니다. 그러나 두 번째 인수를 정수 인수로 전달하는 것보다 분할 후 만들 배열 수를 제한하려는 경우.


3
문제는 무엇 이었습니까? 자세한 설명을 포함하여 답변을 자명하게 만드십시오!
Paresh Mayani

-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

나는 자신의 방법을 쓰는 것을 좋아한다 :)


3
이 방법은 구분 기호가 하드 코드되어 있으므로 너무 유용하지 않습니다. 또한 for 루프로 선형 검색을 구현하면 첫 번째 구분 기호의 위치를 ​​찾는 데 String.indexOf를 사용하는 것보다 이점이 없습니다. 셋째, 반환되는 String 요소 수를 보는 것은 직관적이지 않습니다. 두 가지로 나누는 것에 대해 이야기 할 때 배열을 만드는 대신 정확히 두 개의 문자열을 나타내는 Pair <String, String> 데이터 형식을 사용하는 것이 좋습니다.
Gee Bee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.