dividir string apenas na primeira instância - java

145

Eu quero dividir uma string por '=' charecter. Mas eu quero que ele se divida apenas em primeira instância. Como eu posso fazer isso ? Aqui está um exemplo de JavaScript para '_' char, mas ele não funciona para mim, dividir a string apenas na primeira instância do caractere especificado

Exemplo:

apple=fruit table price=5

Quando tento String.split ('='); dá

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

Mas eu preciso

[apple],[fruit table price=5]

obrigado

Drácula
fonte
Você não precisa escapar =.
Rohit Jain

Respostas:

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

Como String.split(java.lang.String regex, int limit)explica:

A matriz retornada por esse método contém cada substring dessa string que é finalizada por outra substring que corresponde à expressão especificada ou é finalizada no final da string. As substrings na matriz estão na ordem em que ocorrem nessa sequência. Se a expressão não corresponder a nenhuma parte da entrada, a matriz resultante terá apenas um elemento, a saber, essa sequência.

O limitparâmetro controla o número de vezes que o padrão é aplicado e, portanto, afeta o comprimento da matriz resultante. Se o limite n for maior que zero, o padrão será aplicado no máximo n - 1 vezes, o comprimento da matriz não será maior que n e a última entrada da matriz conterá toda a entrada além do último delimitador correspondente.

A sequência boo:and:foo, por exemplo, produz os seguintes resultados com estes parâmetros:

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" }
Zaheer Ahmed
fonte
1
É confuso entender, mas simplesmente funciona! Obrigado!
Clint Eastwood
4
Alguns esclarecimentos: O limite 2 retornará uma lista de no máximo 2 elementos. Pode retornar uma lista de 1 elemento se não houver correspondência com a expressão. Se houver 2 correspondências para a expressão, o segundo elemento da matriz retornada não será dividido.
Modle13
11

Sim, você pode, basta passar o parâmetro inteiro para o método split

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

Aqui está uma referência de documento java: String # split (java.lang.String, int)

codeMan
fonte
5

Como muitas outras respostas sugerem a abordagem de limite, essa pode ser outra maneira

Você pode usar o método indexOf em String, que retornará a primeira ocorrência do caractere especificado. Usando esse índice, você pode obter a saída desejada

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));
Siva
fonte
2
Isso não se divide, mas extrai a segunda parte. Tendo a primeira parte exigiria ainda outra linha de código ... 4 linhas vs. 1 = polegares para baixo
Clint Eastwood
0

Experimente este código ...

Está funcionando.

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]);
    }
}
Bhola
fonte
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

Por padrão, o método split cria n número de matrizes com base no regex especificado. Mas se você deseja restringir o número de matrizes a serem criadas após uma divisão, passe o segundo argumento como um argumento inteiro.

Kailash Karki
fonte
3
Qual era o problema? Inclua mais detalhes para tornar sua resposta auto-explicativa!
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_!

eu gosto de escrever métodos próprios :)

Martin Košťál
fonte
3
Este método não é muito útil, pois o separador é codificado. Além disso, a implementação da pesquisa linear com um loop for não traz vantagem sobre o uso de String.indexOf para encontrar a localização do primeiro separador. Terceiro, não é intuitivo ver quantos elementos String são retornados. Enquanto falamos sobre dividir as coisas em duas, considere usar o tipo de dados Pair <String, String> que representa exatamente duas seqüências em vez de criar uma matriz.
Gee Bee