2015-07-22 10 views
9

Jak usunąć nieprawidłowe znaki z ciągu, aby można było użyć go jako pliku imię?
nieprawidłowe znaki należą ("\\/:*?\"<>|").usuwanie niepoprawnych znaków ((" /: *? " <> | ")) Z ciągu znaków, aby użyć go jako nazwy pliku

+0

możliwy duplikat [Java: usuń wszystkie wystąpienia char z ciągu] (http://stackoverflow.com/questions/4576352/java-remove-all-occurrences-of-char-from -string) – Soana

+0

Jest to zależne od platformy. Na przykład, linux nie ma problemu z wieloma z tych znaków w nazwach plików. – Qualia

Odpowiedz

11

Można spróbować,

String fileName = "\\/:*AAAAA?\"<>|3*7.pdf"; 
String invalidCharRemoved = fileName.replaceAll("[\\\\/:*?\"<>|]", ""); 
System.out.println(invalidCharRemoved); 

WYJŚCIE

AAAAA37.pdf 
+1

należy zastąpić go podkreśleniem "_" zamiast pustym, ponieważ użytkownik może podać nazwę pliku składającą się tylko z nieprawidłowych znaków. w takim przypadku zwróci wartość null. – curious

+0

co z CON i takimi słowami kluczowymi, z którymi użytkownik nie może utworzyć pliku? –

3

można użyć regex

String s= string.replaceAll("[\\\\/:*?\"<>|]", ""); 
+2

Proszę przetestuj swoją odpowiedź przed opublikowaniem. Zauważysz, że występuje problem ze znakiem '' \ ''. Jaki jest sens "^"? – Pshemo

+0

Jestem prawie pewny, że znak^oznacza dopełnienie zestawu, więc wszystko nie obejmuje elementów w zestawie znaków. –

+0

Tak '^' na początku klasy znaków '[^ ...]' reprezentuje negację znaków, którą opisuje, co oznacza, że ​​twoje rozwiązanie usunie wszystko, co nie jest znakiem specjalnym. To, co zrobiłby twój kod (zakładając, że poprawiłoby składnię) byłoby przeciwieństwem tego, co chce OP. – Pshemo

1

nie należy próbować zgadywać użytkownika. Jeśli dostarczona nazwa pliku jest nieprawidłowy po prostu pokazać się komunikat o błędzie lub wyjątek w razie potrzeby:

Removi ng nieprawidłowe znaki z podanej nazwy pliku w żaden sposób nie gwarantuje, że nowa nazwa pliku jest poprawna.

1

Można zastąpić znaki przez replaceAll():

@Test 
public void testName() throws Exception 
{ 
    assertEquals("", "\\/:*?\"<>|".replaceAll("[\\\\/:*?\"<>|]", "")); 
} 

jednak pamiętać, że

  • . i .. na własną rękę są również nieważne, chociaż pozwolić kropek
  • za pomocą pliku z WebDAV, & jest również niedozwolony znak (może być program Microsoft specyficzne)
  • COM1 jest również nieważny nazwa pliku, mimo że ma tylko prawne znaki (dotyczy również PRN, LPT1 i podobnych) (może być specyficzna dla Microsoft)
  • $MFT i podobnych są również nieważne, chociaż można ogólnie używać $ (m może być specyficzny dla NTFS)
Powiązane problemy