Devo sfuggire ai caratteri speciali inviati a Apache Lucene .
Poiché il codice verrà eseguito su un server di produzione, voglio che il codice sia il più veloce possibile.
Ho visto diversi modi per farlo:
- Uso di Pattern
- Uso di Sostituisci
- Uso della libreria
Vedi: link
Mi chiedo:
- Per casi banali come questo, dovrei usare RegEx o personalizzato?
-
Il seguente codice può essere ulteriormente ottimizzato?
/* * Lucene supports escaping special characters that are part of the * query syntax. The current list special characters are + - && || ! * ( ) { } [ ] ^ " ~ * ? : \ * * To escape these character use the \ before the character. */ String query = "http://This+*is||a&&test(whatever!!!!!!)"; char[] queryCharArray = new char[query.length()*2]; char c; int length = query.length(); int currentIndex = 0; for (int i = 0; i < length; i++) { c = query.charAt(i); switch (c) { case ':': case '\': case '?': case '+': case '-': case '!': case '(': case ')': case '{': case '}': case '[': case ']': case '^': case '"': case '~': case '*': queryCharArray[currentIndex++] = '\'; queryCharArray[currentIndex++] = c; break; case '&': case '|': if(i+1 < length && query.charAt(i+1) == c) { queryCharArray[currentIndex++] = '\'; queryCharArray[currentIndex++] = c; queryCharArray[currentIndex++] = c; i++; } break; default: queryCharArray[currentIndex++] = c; } } query = new String(queryCharArray,0,currentIndex); System.out.println("TEST="+query);