一串字符串,例如:bac-cd-de-1.0.1.txt。我想截取其中的1.0.1应该怎样截取?
数字前面的顺序可能是不固定,有可能也有:aaa-bbb-1.0.2.txt截取1.0.2这种。
中间的数字有可能是不固定的,也可能是1.10.12这种不只是单个数字。
对于这种数字前面的字符串不是固定数量的这种字符串怎样分割。
能不能从数字开始到数字结束,截取数字中间的一部分呢?
但是他后面的.txt是一定在的。
用字符串lastIndexOf获取最后一个分隔符“-”的索引,然后再用lastIndexOf获取后缀名的.的索引位置,最后进行截取即可
正则表达式看看。应该是可以的
正则太难学 for循环太麻烦 看你的两组数据是有一定规则的 你可以考虑:
1、如果数字位数是固定的 你可以使用substring 先截取后几位(例如先取出 1.0.1.txt) 然后再把.txt截取掉
2、如果数据位数不是固定的 但.的个数固定 你可以先用数据接收 split 然后收到拼接
小白想法 就这几个字节 速度不用考虑 ;
想适用性强 那只能慢慢看正则了。
数字位数固定,结果str2=(str1.substring(9)).substring(0,5)
数字串长不固定但前面一定有“-”字符,可以先求出后面的总串长 sl=str1.length()-str1.lastIndexOf("-");然后str2=(str1.substring(sl)).substring(0,sl-4)
使用这个正则 String pattern = "([\d]+\.)+";
然后截取最后一个"."之前的所有字符串
String str = "XXX-1.0.2.txt";
String newstr = str.substring(str.length - 9);
newstr = newstr.substring(0, 5);
alert(newstr);
代码如下:
package com.qianqiangongzi.utils;
import org.apache.commons.lang3.StringUtils;
/**
* 字符串分割
*
* @author 谦谦公子爱编程
*
*/
public class StringSplitUtils {
public static void main(String[] args) {
System.out.println(stringSplit("bac-cd-de-1.0.1.txt"));
System.out.println(stringSplit("aaa-bbb-1.0.2.txt"));
System.out.println(stringSplit("bac-cd-de-1.0.12.txt"));
}
/**
* 获取固定格式的版本信息
*
* @param content
* @return
*/
private static String stringSplit(String content) {
String[] arrs = content.split("-");
String filename = arrs[arrs.length - 1];
String filePostfix = getFilePostfixContainDot(filename);
return StringUtils.remove(filename, filePostfix);
}
/**
* 获得文件的后缀
*
* @param fileName
* @return 小写的文件后缀
*/
public static String getFilePostfix(String fileName) {
String postfix = null;
if (fileName.indexOf(".") != -1) {
postfix = fileName.substring(fileName.lastIndexOf(".") + 1);
}
return postfix == "" ? "" : postfix.toLowerCase();
}
/**
* 获取文件后缀包含"." 如".txt"
*
* @param fileName
* @return 没有后缀返回null
*/
public static String getFilePostfixContainDot(String fileName) {
String postfix = getFilePostfix(fileName);
return postfix == "" ? "" : "." + postfix;
}
}