2015-11-19 21 views
5

Questo potrebbe sembrare un gioco da ragazzi a prima vista. Probabilmente lo è, ma alcune cose mi fanno sentire che potrebbe mancare qualcosa. Il primo the Java documentation for Character.isWhitespace sembra escluderlo. La definizione di cosa è e cosa non è consentito come spazio bianco sembra molto definitiva ('if e only if') e la prima riga dice non uno spazio senza interruzioni.Java considera uno spazio "normale" come spazio bianco ai fini di Character.isWhitespace?

Ho sempre considerato uno "spazio" ordinario - quella cosa che si ottiene quando si preme una barra spaziatrice - come non-breaking space.

Quindi, dove si inserisce nell'elenco? L'elenco è considerato come definitivo nella risposta con il punteggio più alto a this question - sto semplicemente leggendo male? Inoltre, il primo commentatore alla risposta in alto in this question sembra avere i suoi dubbi (in un contesto diverso). Tuttavia, quando costruisco un semplice bit di codice da testare, indica che uno spazio normale è un'istanza di spazio bianco, come ci si aspetterebbe.

import static java.lang.Character.isWhitespace; 

public class WhitespaceCheck { 

    public static void main(String[] args) { 

     Character test = ' '; 

     if (Character.isWhitespace(test)) { 
      System.out.println("Is whitespace!");       
     } else { 
      System.out.println("Is not whitespace!"); 
     } 
    } 
} 

Quindi, sto leggendo il primo elemento della lista a torto, è da qualche altra parte nella lista, o è la lista stessa semplicemente sbagliato?

+1

Penso che la documentazione dichiari che è inclusa, perché 'SPACE_SEPARATOR' è' U + 0020' se non mi sbaglio –

+1

Ho usato spazi non interrotti in Microsoft Word per impedire che si verifichi un'interruzione di riga tra le parole che volevo davvero essere tenuto insieme. Sono stati inseriti usando Ctrl + Maiusc + Barra spaziatrice. Non dovrebbero essere confusi con il personaggio che viene solitamente prodotto premendo solo la barra spaziatrice. –

+0

@a_horse_with_no_name Quasi lì! Come dice l'altra risposta, 'U + 0020' è incluso nella categoria di Unicode coperta da SPACE_SEPARATOR. – Reg

risposta

12

Ti stai sbagliando; uno spazio anti-rottura impedisce un'interruzione di linea. È un tipo speciale di spazio e non "normale" che consente un'interruzione di riga. Se uno spazio "normale" era uno spazio non interrotto, le linee non si sarebbero mai avvolte quando si raggiungeva il bordo dello schermo, a meno che non si premesse di tornare manualmente ogni volta.

La prima riga dice:

Si tratta di uno spazio di carattere Unicode (SPACE_SEPARATOR, LINE_SEPARATOR o PARAGRAPH_SEPARATOR), ma non è anche uno spazio unificatore ('\ u00A0', '\ u2007', '\ u202F')

un elenco di spazi unicode coperto da SPACE_SEPARATOR può essere trovato qui:

https://en.wikipedia.org/wiki/Whitespace_character

La documentazione per SPACE_SEPARATOR indica che si riferisce a una categoria di caratteri Unicode, non a un carattere specifico. Lo spazio "normale" del titolo (che è quello che viene solitamente prodotto dalla barra spaziatrice) è incluso in questa categoria.