形如这样的字符串: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.substring(0,ss.lastIndexOf("_"));
tmp = tmp.substring(0,tmp.lastIndexOf("_"));
System.out.println(tmp);
解决方案 »
- 求助一个关于动态代理中InvocationHandler接口的invoke方法返回值的问题
- 我如何能用visibroker 6.5中的ORB类呢?而不是用 org.omg.CORBA.ORB 的ORB类 在eslipce中
- 正则表达式的问题
- 一道线程的题目,头痛。。。
- 对象继承和overload的问题。比较难的一道SCJP考题,我晕了。
- 有没有简单方法对List做整体clone的?怎么做?(list里的object都是cloneable的)
- eclipse 中运行时怎么设置"命令行参数"的传入
- 谁能给一个java流分析文本内容的程序? 100分
- 哪位有《最新java核心技术 卷二:高级性能》一书的电子版,200分相赠。
- java返回匿名类的问题
- 一个applet应用程序,结果输出时"\n"换行不去作用,且appletviewer窗口有乱码,怎样解决
- 新手 求助 谢谢
用正则:
String ss = "Patch_20130102_行业版_1_0010";
String tmp = ss.replaceAll("(.*)_.*?_.*?", "$1");
String ss = "Patch_20130102_行业版_1_0010";
String tmp = ss.replaceAll("((.*)+)_((.*)?)_((.*)?)", "$1");
System.out.println(tmp);
我觉得这个基本是一个业务指定的名称,不会有太大的变化性,用下划线去判断反而有点浪费。这个字符串每次会改变的都是年份和后面的版本号,前面14位的长度是不会改变的,可以直接用substring(0,14)就可以了。如果这个名称经常改动,一定要用最后第二个下划线来判断的话,建议还是用你自己的那个方法,正则表达式虽然效率高好用,但是可读性比较差,对于经常需要更改的需求,反而加大维护项目的成本。
我觉得这个基本是一个业务指定的名称,不会有太大的变化性,用下划线去判断反而有点浪费。这个字符串每次会改变的都是年份和后面的版本号,前面14位的长度是不会改变的,可以直接用substring(0,14)就可以了。如果这个名称经常改动,一定要用最后第二个下划线来判断的话,建议还是用你自己的那个方法,正则表达式虽然效率高好用,但是可读性比较差,对于经常需要更改的需求,反而加大维护项目的成本。
String tmp = ss.replaceAll("(.*)_(.*?)_(.*)", "$1");就可以了
第一种:用split("_")得到的String数组,将数组length-3的元素用_连接成一个String,这是最直接的方式。
第二种:用lastIndexOf("_")找到最后一个_的位置,然后substring,得到的心字符串,再调用一次开始的过程,就可以了。
第三种:正则
.......很多种方法都能实现的。