2015-12-21 19 views
5

ho definito comeOttenere la lunghezza effettiva della stringa definita in Java

String s = "\\"; 
int length = s.length(); // returns 1 
System.out.println(s); // prints only one "\" 

Come posso ottenere la sua dimensione pari a 2?

UPD: Il problema non è ottenere esattamente la stringa di 2 dimensioni. Ho bisogno di ottenere il conteggio dei caratteri sorgente che ho definito il mio String da.

+1

Hai provato a stampare la stringa .. Solo per garantire che la tua comprensione sia corretta? – TheLostMind

+0

@SeniorJD per favore ascolta quello che molte persone ti stanno dicendo: 1 ** è ** la lunghezza della stringa che hai definito. –

+0

Potrebbe essere utile specificare esattamente il motivo per cui è necessario sapere che la lunghezza è due invece di una: il programma deve sapere in modo specifico se le stringhe vengono sfuggite? – Fallso

risposta

2

Utilizzare il CharConverter da DrJava. È possibile adattare lo source code per il proprio progetto. Ha un metodo che converte tutti i caratteri di escape in una stringa fino al vero input Java.

String str1 = "\\"; 
String str2 = CharConverter.escapeString(str1); 
System.out.println(str2.length()); // prints 2 
10

String s = "\\"; contiene solo il carattere \, e dato che è un uno speciale, deve essere sfuggito con il carattere \.

Al fine di ottenere una stringa 2 dimensioni, si può sfuggire due barre rovesciate, in questo modo:

String s = "\\\\"; 

Questo uno non ha le dimensioni di 4, ma 2, perché ci sono personaggi (ovviamente , come il backslash) che non sono rappresentati da un singolo elemento visivo nell'editor.

Ci sono anche caratteri, che possono essere completamente invisibili durante la stampa (come lo Mongolian vowel separator), ma che sono rappresentati in modo diverso nella sorgente (dal loro codice Unicode). Ad esempio, il separatore vocale mongolo può essere rappresentato come:

String mongolianVowelSeparator = "\u180"; <-- one character only, invisible when printed 

Quindi qui abbiamo un solo carattere (il carattere U+180E Unicode), ma abbiamo usato cinque caratteri dell'editor per rappresentarlo.

+0

Ma, in questo caso ho bisogno di ottenere '4' come risposta – SeniorJD

+0

No, dovresti capire che alcuni caratteri sono rappresentati nel codice come una sequenza di caratteri. –

+0

@SeniorJD - No, non lo farai .. '\\' ha un significato speciale in java. È considerato come * carattere di escape * – TheLostMind

2

Vedi le JLS - 3.10.6. Escape Sequences for Character and String Literals:

il carattere e la stringa di sequenze di escape consentono la rappresentazione di alcuni caratteri non grafici, così come la singola citazione, virgolette, e backslash caratteri letterali di caratteri (§3.10.4) e stringhe letterali (§3.10.5).

...

\ \ /* \u005c: backslash \ */

Il carattere \ viene utilizzato in Unicode Escapes:

Oltre al trattamento implicita grammatica, per ciascun carattere di input grezza che è una barra retroversa \, l'elaborazione dell'input deve considerare quanti altri \ caratteri lo precedono in modo contiguo, separandolo da un carattere non \ o dall'inizio del flusso di input. Se questo numero è pari, lo \ è idoneo per iniziare un'uscita Unicode; se il numero è dispari, lo \ non è idoneo per iniziare un'uscita Unicode.

Vale la pena ricordare che la stringa può essere scritto come:

\u005c 

Dal 005c è il valore Unicode per \.

-2

Come detto sopra, "\" è un carattere di escape e non sommato alla lunghezza totale della stringa. Tuttavia, se insisti che i caratteri di escape devono essere aggiunti alla lunghezza totale, prova questa parte di codice qui sotto.

Per ogni "\" nelle stringhe, la lunghezza totale viene aumentata di un'unità.

String s = "\\"; 
int length = s.length(); 

for(int i = 0; i < s.length; i++) 
    if(s.charAt(i) == '\') 
     length++; 
+0

E come funzionerebbe per 'String s =" \ 123 "'? – SeniorJD

+0

Ti suggerisco di usare la tua logica qualche volta. Ad ogni modo, basta cambiare leggermente il codice: per (int i = 1; i toliii

+0

cosa succede se String è '" 123 \ 123 "'? – SeniorJD

Problemi correlati