2015-06-23 12 views
10

Si prega di vedere il codice qui sotto -stringa Java spaccatura dà diverse uscite su Windows e Linux

String s11 ="!country=India ";  
String[] ss =s11.split("((?<=[!&|])|(?=[!&|]))"); 
System.out.println(ss.length); 
for(String s :ss) { 
    System.out.println(s); 
} 

In Windows dà

2 
! 
country=India 

Considerando che con Ubuntu dà

3 

! 
country=India 

Perché dovrebbe essere?

+9

che cos'è la versione Java per entrambe le piattaforme? –

+1

La nuova riga parte dell'output per Ubuntu? – Aderis

+0

ti darebbe tre parti, la suddivisione eseguita su quella prima '!' E quella successiva a '!'. Non so come java prende la prima stringa vuota. –

risposta

7

Questo comportamento è non a causa dei diversi sistemi operativi, ma sono utilizzati probabilmente diverse versioni della JVM.

bug

Questo "cambiamento di comportamento" ha causato ad essere filed incorrectly per Java 8.

La documentazione è stata aggiornata per JDK 8, ed è anche discusso a lungo in this question, dove diviso in Java 8 rimuove stringhe vuote al inizio dell'array di risultati. Questo è il motivo per cui la stringa vuota aggiuntiva prima dello ! non viene creata (quindi la lunghezza di 2 invece di 3).

notare la differenza di documentazione per il metodo di split()in Java 7 e Java 8 per la classe Pattern, e la classe stringa (Java 7, Java 8), rispettivamente. Vedi la domanda originale collegata per ulteriori informazioni al riguardo.

Ho anche riprodotto questo problema su Java 7: sun-jdk-1.7.0_10 (ideone) e Java 8 sun-jdk-8u25 (ideone). See the Java versions here.Lo split di Java 8 non fornirà la stringa extra vuota nell'array, mentre lo split di Java 7 lo farà.

Questo non è perché il sistema è Linux o Windows, ma piuttosto la versione JVM. Puoi ricontrollare la versione della tua JVM con java -version

+0

grazie ...sembra ... ho provato su ideone da solo, ma sia il 7 che l'8 mi hanno dato gli stessi risultati (nessuna linea in più), ma poi ho appena biforcato il link e ho provato e notato quello che hai detto ... grazie per l'aiuto. – user2931444

+0

@ user2931444 felice di aver risolto il problema, questo è un comportamento interessante che hai trovato. non dimenticare di accettare una risposta se è la risposta giusta e ha aiutato! Benvenuti in SO. – matrixanomaly