read parser example java regex split apex-code

java - parser - ¿Por qué "||".split("// |"). Length devuelve 0 y no 3?



simplejson java (2)

Cuando hay separadores adyacentes en la expresión dividida, espero nulo o una cadena vacía; no la eliminé.

El código de Java está abajo:

public class splitter { public static void main(String args[]) { int size = "||".split("//|").length; assert size == 3 : "size should be 3 and not " + size; } }

Esperaba obtener {"", "", ""} o {null, null, null}. Cualquiera estaría bien.

¿Tal vez haya una expresión regular que no sea engañada por palabras vacías?


De acuerdo con el javadoc :

Este método funciona como si invocando el método de split dos argumentos con la expresión dada y un argumento de límite de cero. Por lo tanto, las cadenas vacías no se incluyen en la matriz resultante.

El javadoc para split(String, int) elabora:

El parámetro de limit 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, entonces el patrón se aplicará a lo sumo 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. Si n no es positivo, el patrón se aplicará tantas veces como sea posible y la matriz puede tener cualquier longitud. Si n es cero, el patrón se aplicará tantas veces como sea posible, la matriz puede tener cualquier longitud, y las cadenas vacías posteriores se descartarán.

(énfasis mío)

Para devolver una matriz de cadenas vacías, llame a "||".split("//|", -1)


Necesito mirar más de cerca la respuesta de Paul (su aspecto es más simple), pero pude encontrar algo sobre las expresiones de anticipación que resuelven las afirmaciones (me disculpo por el hecho de que el código esté en Apex, simplemente envuelve Java).

static testMethod void testPatternStringSplit() { Pattern aPattern = Pattern.Compile(''(?=//|)''); system.assertEquals(3, aPattern.split(''||'').size()); system.assertEquals(3, aPattern.split('' | | '').size()); system.assertEquals(3, aPattern.split(''a|b|c'').size()); system.assertEquals(3, aPattern.split(''a|b|'').size()); system.assertEquals(3, aPattern.split(''|b|c'').size()); system.assertEquals(3, aPattern.split(''|b|'').size()); }

Necesito escribir un código para probar la ...