java – 从字符串中删除随机表达式
我有一个像这样的字符串/列
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)中执行此操作会更好.有没有想过直接使用select从列中获取这个格式化的字符串? 还有一个要求,我不想显示文件的扩展名.所以没有”’之后没有.应该显示,这意味着这样的’000003023_AggregateStopLossLimit_W_2012-12-22′ select regexp_replace ( your_string,'([^[:space]]*) (.*)_(.*)....','1_3') as new_string from your_table 这个工作正常.这应该是删除最后4个字符,如果扩展名大于或小于3或者字符串没有被截断,则存在无法获得正确结果的风险.我正在寻找一种更美观的方式来做到这一点. 解决方法
要在数据库中执行此操作:
select regexp_replace ( your_string,'([^[:space]]*) (.*)_(.*)','1_3') as new_string from your_table 不幸的是,Oracle在其正则表达式实现中没有任何强制执行惰性(非贪婪)的语法.这就是为什么我的原始'(.*)’包括x3A:它与最后一个空格匹配,下面是下划线.但是,否定语法会将字符串隔离到第一个空格.
您可以根据需要格式化替换字符串.简单的方法是做我已经完成的工作,并在两个匹配的模式之间硬编码下划线.或者,您可以将其设置为自己的搜索模式,并将其包含在替换字符串中(尽管您更有可能为更复杂的搜索执行此操作). Oracle在10g中引入了正则表达式;函数涵盖in the documentation.正则表达式实现符合POSIX,所以它缺少Perl中可能遇到的一些函数.正则表达式支持详见an appendix to the SQL ref. 至于教程,我有一本很复杂的O’Reilly口袋书;我在Open World 2003获得了我的副本,但电子书的价格合理. Buy it here. Anotgher的好起点是OTN论坛上的一系列线程:start reading here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用Java中的对象调用静态方法会出现什么问题?
- JSP Request.getParameter()方法:获得客户端传送给服务器端
- JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、
- java – 从arrayList中删除随机索引
- java – 在JTextPane中禁用Word换行
- java – Spring TaskExecutor:如何在所有任务完成执行时以
- 使用JavaBean创建您的网上日历本(2)
- java – LocalDate无法使用’yyyy’解析’ww’
- java – @Before在TestRule中的方法不被调用
- java – 长按不适用于ListView