2012-12-20 17 views
5

obciąć ciąg Oto co używam:Wyrażenie regularne obciąć ciąg

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

Wyjście jest „to jest te ...” Jak mogę uzyskać dostęp do rozszerzenia nazwy pliku, tak aby wyjście staje się: "to jest ... pdf" Mogę użyć metody podłańcuchowej, aby uzyskać dostęp do ostatnich trzech znaków, ale inne rozszerzenia plików mogą mieć 4 znaki długości, takie jak .aspx

Czy istnieje wyrażenie regularne, z którego mogę korzystać tak, że "to jest obcięcie testowe 1.pdf" staje się "to jest te ... pdf"

Odpowiedz

5

Można zrobić to z szybkim regex zastąpić tak:

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

dziękuję, czy możesz podać szybkie wyjaśnienie tego wyrażenia? –

+2

Oczywiście, więc zasadniczo zbierasz dwie grupy (1 $ i 2 $) z pasującego wyrażenia i zastępujesz je w nowym. '(. {0,10})' jest pierwszą grupą, "dopasuj co 0 do 10 razy". Druga grupa to '(\\ .. +)', co oznacza "kropkę, a następnie co najmniej raz". Ostatnią częścią triku jest umieszczenie '. *' W środku, co jest chciwym dopasowaniem, które będzie pasować tak dużo, jak to tylko możliwe, jednocześnie zachowując ostatnią grupę. Więc nawet jeśli masz wiele kropek w środku nazwy, '. *' Je po prostu zjedzą. –

0

Z tego prostego zadania nie trzeba Regex

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

Na pytanie, rozszerzenia mogą być dowolnej długości. – Lincoded

+0

masz rację. przeoczyłem to: – gefei

0

spróbować -

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

Co jeśli jest więcej niż jedna kropka (.)? –

+0

ok Mam zaktualizowany mój kod. –

+0

zmiana test2. [Test2.length-1] na test2 [test2.length-1] –

0

Można użyć .+[.](.*?)

ten pasuje do wszystkich znaków w tym kropek, a następnie kropkę, to każdy postać, ale nie chciwa, więc pierwsza część powinna pobrać cały łańcuch poprzedzający ostatnią kropkę. Grupa przechwytująca pozwoli ci odzyskać potrzebną część.

2

Czy to tak:

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

Można po prostu użyć

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

Używam tego podejście, ale zadziała tylko wtedy, gdy masz pojedynczy "." i ten również dla rozszerzenia nazwy pliku. Może być to jeden z nowatorskich rozwiązań, ponieważ możesz używać metody dzielenia klasy String też .......

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())); 
    } 
Powiązane problemy