La funzionalità di divisione sembra essere diversa tra Java e JavaScript.Comportamento diviso tra Java e JavaScript
Non ho esattamente bisogno di abbinare un determinato criterio di espressione regolare, o usare espressioni regolari basate su lookahead. Il mio problema risiede nelle partite vuote che vengono seguite dopo la corrispondenza finale della regex divisa (che è un semplice set di caratteri e non un'espressione).
Di seguito è riportato un esempio dell'output che sto cercando di ottenere e che cosa sto ottenendo davvero.
Java
("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~")
/* results with an array of length 8 */ (java.lang.String[]) [, , , A, B, C, D, E]
Javascript
"~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~".split("~#~")
/* results with an array of length 11 */ ["", "", "", "A", "B", "C", "D", "E", "", "", ""]
davvero non riesco a mettere le mani su una buona spiegazione per questo, come sto lavorando con un'applicazione Java e la divisione è mi crea problemi, voglio lo stesso risultato di JavaScript. Come posso averlo?
Nonostante le similitudini nome (forse la decisione più stupida di sempre), sono in realtà diverse lingue. Scoprirai che anche il 'split' in C funziona in modo diverso (lamentandosi di non riuscire a trovarlo, soprattutto). – paxdiablo
Come è logico che Java ometti le stringhe vuote alla fine della divisione, ma non quelle prepensionanti? Il risultato che Javascript ti dà ha molto più senso. – connexo
@connexo: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29: "Le stringhe vuote finali non sono quindi incluse nel array risultante. – paxdiablo