Usuń losowe wyrażenie z łańcucha
Mam taki ciąg / kolumnę
String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF";
Chcę utworzyć podciąg, który nie ma części' x3A 973911'
w tym.
Co znaczy, że chcę coś takiego,
000003023_AggregateStopLossLimit_W_2012-12-22.PDF
Istnieje lista takich ciągów, które będą miały różne wartości, ale format będzie taki sam. Chcę, aby część sznurka została usunięta po pierwszej spacji i kończy się przy następnym „_”.
Właśnie to już zrobiłem, to działa dobrze, ale chcę wiedzieć, czy jest lepszy sposób na zrobienie tego.
String b = a.replaceAll(a.substring(a.indexOf(" "), a.indexOf("_",a.indexOf(" "))),"");
Byłoby jeszcze lepiej, gdybym mógł to zrobić w samej db, która jest wyrocznią, zamiast w java. Jakikolwiek pomysł, aby pobrać ten sformatowany ciąg bezpośrednio z kolumny przy użyciu select?
Jeszcze jedno wymaganie, nie chcę wyświetlać rozszerzenia pliku.
Więc nic po „.” powinien być wyświetlany, co oznacza coś takiego'000003023_AggregateStopLossLimit_W_2012-12-22'
Wypróbowałem poniższe, korzystając z poprzedniego rozwiązania APC
select regexp_replace ( your_string
, '([^[:space]]*) (.*)_(.*)....'
, '\1_\3') as new_string from your_table
Na razie działa dobrze.
Powinno to usuwać ostatnie 4 znaki i grozić, że nie uzyskasz właściwego wyniku, jeśli rozszerzenie jest większe lub mniejsze niż 3 lub jeśli łańcuch nie jest obcięty.
Szukam bardziej estetycznego sposobu na to.
Jakaś szansa?