日期:2014-05-20  浏览次数:21086 次

怎么定位、并截取至倒数第二个指定字符
形如这样的字符串:Patch_20130102_行业版_1_0010 怎么定位到倒数第二个“_”,并截取倒数第二个“_”前面的字符串。
现在是这么实现的,不知道还有没有简单的方法,求助呀....

String ss = "Patch_20130102_行业版_1_0010";
String tmp = ss.substring(0,ss.lastIndexOf("_"));
tmp = tmp.substring(0,tmp.lastIndexOf("_"));
System.out.println(tmp);

------解决方案--------------------
你这个代码不算太复杂,
用正则:
String ss = "Patch_20130102_行业版_1_0010";
String tmp = ss.replaceAll("(.*)_.*?_.*?", "$1");


------解决方案--------------------
这种每段拼接的数据,直接用split "_"得到一个数组[Patch, 20130102, 行业版, 1, 0010]。这个单独的数据都有了,后面要用的话直接拼接,拓展性好点。

String[] str = "Patch_20130102_行业版_1_0010".split("_");

------解决方案--------------------
观察楼主的字符串:Patch_20130102_行业版_1_0010
我觉得这个基本是一个业务指定的名称,不会有太大的变化性,用下划线去判断反而有点浪费。这个字符串每次会改变的都是年份和后面的版本号,前面14位的长度是不会改变的,可以直接用substring(0,14)就可以了。

如果这个名称经常改动,一定要用最后第二个下划线来判断的话,建议还是用你自己的那个方法,正则表达式虽然效率高好用,但是可读性比较差,对于经常需要更改的需求,反而加大维护项目的成本。
------解决方案--------------------
引用:
引用:
Java code
String ss = "Patch_20130102_行业版_1_0010";  String tmp = ss.replaceAll("((.*)+)_((.*)?)_((.*)?)", "$1"); System.out.println(tmp);
这个对了,但是能麻烦再给解释一下为什么1楼的……

刚开始我想复杂了其实只要
String tmp = ss.replaceAll("(.*)_(.*?)_(.*)", "$1");就可以了