cadena dividida solo en primera instancia - java

145

Quiero dividir una cadena por '=' caracter. Pero quiero que se divida solo en primera instancia. Cómo puedo hacer eso ? Aquí hay un ejemplo de JavaScript para '_' char, pero no me funciona dividir la cadena solo en la primera instancia del carácter especificado

Ejemplo:

apple=fruit table price=5

Cuando intento String.split ('='); da

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

Pero yo necesito

[apple],[fruit table price=5]

Gracias

drácula
fuente
No necesitas escapar =.
Rohit Jain

Respuestas:

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

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

La matriz devuelta por este método contiene cada subcadena de esta cadena que termina en otra subcadena que coincide con la expresión dada o termina al final de la cadena. Las subcadenas de la matriz están en el orden en que aparecen en esta cadena. Si la expresión no coincide con ninguna parte de la entrada, la matriz resultante tiene solo un elemento, es decir, esta cadena.

El limitparámetro controla el número de veces que se aplica el patrón y, por lo tanto, afecta la longitud de la matriz resultante. Si el límite n es mayor que cero, el patrón se aplicará como máximo n - 1 veces, la longitud de la matriz no será mayor que n , y la última entrada de la matriz contendrá todas las entradas más allá del último delimitador coincidente.

La cadena boo:and:foo, por ejemplo, produce los siguientes resultados con estos 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
fuente
1
Es confuso de entender, ¡pero simplemente funciona! ¡Gracias!
Clint Eastwood
44
Algunas aclaraciones: el límite 2 devolverá una lista de elementos MÁS 2. Puede devolver una lista de 1 elemento si no hay coincidencia con la expresión. Si hay 2 coincidencias con la expresión, el segundo elemento de la matriz devuelta no se dividirá.
modle13
11

Sí, puedes, simplemente pasa el parámetro entero al método de división

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

stSplit.split("=", 2);

Aquí hay una referencia de documentación de Java: String # split (java.lang.String, int)

codeMan
fuente
5

Como muchas otras respuestas sugieren el enfoque de límite, esta puede ser otra forma

Puede usar el método indexOf en String que devolverá la primera Ocurrencia del carácter dado. Usando ese índice puede obtener la salida deseada

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));
Siva
fuente
2
Esto no se divide sino que extrae la segunda parte. Tomar la primera parte requeriría otra línea de código ... 4 líneas vs. 1 = pulgar hacia abajo
Clint Eastwood
0

Prueba este código ...

Esta 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
fuente
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 defecto, el método de división crea n número de matrices en función de la expresión regular dada. Pero si desea restringir el número de matrices para crear después de una división que pasar el segundo argumento como un argumento entero.

Kailash Karki
fuente
3
¿Cual fue el problema? ¡Incluya más detalles para que su respuesta se explique por sí misma!
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_!

me gusta escribir métodos propios :)

Martin Košťál
fuente
3
Este método no es demasiado útil, ya que el separador está codificado. Además, la implementación de la búsqueda lineal con un ciclo for no ofrece ninguna ventaja sobre el uso de String.indexOf para encontrar la ubicación del primer separador. En tercer lugar, no es intuitivo ver cuántos elementos de cadena se devuelven. Mientras hablamos de dividir las cosas en dos, considere usar el tipo de datos Pair <String, String> que representa exactamente dos cadenas en lugar de crear una matriz.
Gee Bee