java 在带有数字、字母、字符组成的字符串分割出从数字开始到数字结束的固定字符串

一串字符串,例如:bac-cd-de-1.0.1.txt。我想截取其中的1.0.1应该怎样截取?
数字前面的顺序可能是不固定,有可能也有:aaa-bbb-1.0.2.txt截取1.0.2这种。
中间的数字有可能是不固定的,也可能是1.10.12这种不只是单个数字。
对于这种数字前面的字符串不是固定数量的这种字符串怎样分割。
能不能从数字开始到数字结束,截取数字中间的一部分呢?
但是他后面的.txt是一定在的。

7个回答

用字符串lastIndexOf获取最后一个分隔符“-”的索引,然后再用lastIndexOf获取后缀名的.的索引位置,最后进行截取即可

正则表达式看看。应该是可以的

ladysosoli
ladysosoli 谢谢大佬~但是正则比较难我还得再研究一下,这个问题就先用简单的索引解决一下
一年多之前 回复

正则太难学 for循环太麻烦 看你的两组数据是有一定规则的 你可以考虑:
1、如果数字位数是固定的 你可以使用substring 先截取后几位(例如先取出 1.0.1.txt) 然后再把.txt截取掉
2、如果数据位数不是固定的 但.的个数固定 你可以先用数据接收 split 然后收到拼接

小白想法 就这几个字节 速度不用考虑 ;
想适用性强 那只能慢慢看正则了。

ladysosoli
ladysosoli 谢谢~我试过了了split,还需要再把分开的数字再拼接成字符串,用索引位置的方式更好一点
一年多之前 回复

数字位数固定,结果str2=(str1.substring(9)).substring(0,5)
数字串长不固定但前面一定有“-”字符,可以先求出后面的总串长 sl=str1.length()-str1.lastIndexOf("-");然后str2=(str1.substring(sl)).substring(0,sl-4)

ladysosoli
ladysosoli 谢谢大佬~
一年多之前 回复

使用这个正则 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;
    }
}

运行结果:
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐