ladysosoli
ladysosoli
采纳率95.7%
2019-03-13 10:11 阅读 926
已采纳

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

5

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    qq_22847605 qq_22847605 2019-03-13 10:50

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

    点赞 评论 复制链接分享
  • weixin_37486553 燕双嘤嘤 2019-03-13 10:15

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

    点赞 评论 复制链接分享
  • jinfengxiaozi666666 jinfengxiaozi666666 2019-03-13 10:31

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

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

    点赞 评论 复制链接分享
  • boat0663 boat0663 2019-03-13 10:47

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

    点赞 评论 复制链接分享
  • JRneymar JRneymar 2019-03-13 11:08

    使用这个正则 String pattern = "([\d]+\.)+";
    然后截取最后一个"."之前的所有字符串

    点赞 评论 复制链接分享
  • mym2018 mym2018 2019-03-13 11:09
            String str = "XXX-1.0.2.txt";
            String newstr = str.substring(str.length - 9);
            newstr = newstr.substring(0, 5);
            alert(newstr);
    
    点赞 评论 复制链接分享
  • weixin_40584261 TinerSky 2019-03-13 11:16

    代码如下:

    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;
        }
    }
    
    

    运行结果:
    图片说明

    点赞 评论 复制链接分享

相关推荐