2012-12-20 11 views
5

per troncare una stringa qui è quello che sto usando:un'espressione regolare per troncare una stringa

String test1 = "this is test truncation 1.pdf";  
String p1 = test1.substring(0, 10) + "..."; 
System.out.println(p1); 

L'uscita è 'questo è te ...' Come posso accedere l'estensione del nome file in modo che l'output diventa: 'this is te ... pdf' Potrei usare il metodo di sottostringa per accedere agli ultimi tre caratteri ma altre estensioni di file potrebbero essere 4 caratteri di lunghezza come .aspx

Esiste un'espressione regolare che posso usare in modo che "questo è troncamento test 1.pdf" diventa "questo è te ... pdf"

risposta

5

si può fare tutto con una rapida regex sostituire in questo modo:

test1.replaceAll("(.{0,10}).*(\\..+)","$1...$2") 
+0

grazie, puoi fornire una rapida spiegazione di questa espressione per favore? –

+2

Certo, quindi essenzialmente raccogli due gruppi ($ 1 e $ 2) dall'espressione corrispondente e li sostituisci nel nuovo. '(. {0,10})' è il primo gruppo, "corrisponde a qualsiasi da 0 a 10 volte". Il secondo gruppo è '(\\ .. +)' che significa "un punto seguito da qualsiasi cosa almeno una volta". L'ultima parte del trucco consiste nel mettere ". *" Nel mezzo, che è una partita avida, che combacerà il più possibile conservando l'ultimo gruppo. Quindi anche se hai più punti nel mezzo del nome, '. *' Li mangerà solo. –

0

Per questa semplice operazione non è necessario Regex

String p1 = test1.substring(0, 10) + "..." + test1.substring(test1.lastIndexof('.')); 
+0

Per la domanda, le estensioni possono essere di qualsiasi lunghezza. – Lincoded

+0

hai ragione. ho trascurato che – gefei

0

provare questo -

String test1 = "this is test truncation 1.pdf"; 
String[] test2 = test1.split("\\.");  
String p1 = test1.substring(0, 10) + "..." + test2[test2.length-1]; 
System.out.println(p1); 
+0

E se ci fossero più di un punto (.)? –

+0

ok ho aggiornato il mio codice. –

+0

cambia test2. [Test2.length-1] a test2 [test2.length-1] –

0

Si potrebbe usare .+[.](.*?)

Questo corrisponde a tutti i caratteri, compresi punti, poi un punto, allora ogni carattere, ma non avido, quindi la prima parte dovrebbe afferrare tutta la stringa che precede l'ultimo punto. Il gruppo di acquisizione ti consentirà di recuperare la parte di cui hai bisogno.

2

fare in questo modo:

String[] parts = test1.split("\\."); 
String ext = parts[parts.length-1]; 
String p1 = test1.substring(0, 10) + "..."+ext; 
System.out.println(p1); 
2

si può semplicemente utilizzare

test1.substring(0, 10) + "..." + test1.substring(test1.lastIndexOf('.')) 
0

Io uso questo approccio ma funzionerà solo se si ha il singolo "." e anche quello per l'estensione del nome del file.Può essere questo è un approccio novizio poichè puoi usare anche il metodo split della classe String .......

String str="abcdefg ghi.pdf"; 
    int dotIndex=str.indexOf(".")+1; 
    if(str.indexOf(" ", dotIndex)!=-1) 
     System.out.println(str.substring(dotIndex,str.indexOf(" ", dotIndex))); 
    else 
    { 
     System.out.println(str.substring(dotIndex,str.length())); 
    } 
Problemi correlati