我有一个类似这样的字符串/列
String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF";
我想创建一个没有该部分的子字符串' x3A 973911'
。
这意味着我想要这样的东西,
000003023_AggregateStopLossLimit_W_2012-12-22.PDF
有一个此类字符串的列表,这些字符串将具有不同的值但格式相同。我希望删除在第一个空格之后并在下一个'_'结束的字符串部分。
这是我已经做过的,工作正常,但想知道是否有更好的方法。
String b = a.replaceAll(a.substring(a.indexOf(" "), a.indexOf("_",a.indexOf(" "))),"");
如果我可以在 db 本身(即 oracle)中而不是在 java 中执行此操作,那就更好了。任何想法直接使用选择从列中获取此格式化字符串?
还有一个要求,我不想显示文件的扩展名。
所以在“。”之后什么都没有。应该显示,这意味着像这样'000003023_AggregateStopLossLimit_W_2012-12-22'
我使用以前的 APC 解决方案尝试了以下操作
select regexp_replace ( your_string
, '([^[:space]]*) (.*)_(.*)....'
, '\1_\3') as new_string from your_table
这目前工作正常。
这应该删除最后 4 个字符,并且如果扩展名大于或小于 3 或字符串未被截断,则可能无法获得正确的结果。
我正在寻找一种更美观的方式来做到这一点。
任何机会?