【已解决】字符串截取相关

@Ta 2022-09-02发布,2022-09-05修改 7392点击
某原始数据:(需求:只要车辆品牌名称)
33|奥迪|A         |0|323483
327|爱驰|A         |0|52
378|AUXUN傲旋|A         |0|33
14|本田|B         |0|387964
15|宝马|B         |0|268511
36|奔驰|B         |0|210492
38|别克|B         |0|167705
75|比亚迪|B         |0|91921

        for (String s : stringList) {
            int i = s.indexOf("|") + 1; // 得到索引下标
            String str = s.substring(i);

            String result = str.substring(0, str.indexOf("|"));
            System.out.println(result);
        }


虽然已经实现,但不够优雅!请大佬帮优化一下:
22333.png(49.55 KB)
回复列表(24|隐藏机器人聊天)
  • @Ta / 2022-09-02 / /
    尝试过用正则,实在是弄不出来!
  • @Ta / 2022-09-02 / /
    截取应该是最快的了,截取的代码可以简化一下,三行
                int i = s.indexOf("|")+1; // 得到索引下标
                String result = s.substring(i, s.indexOf("|", i));
                System.out.println(result);
    

    正则可能会慢一些
            Pattern pattern = Pattern.compile("[^|]+\\|([^|]+).*");
            for (String s : list) {
                Matcher matcher = pattern.matcher(s);
                if (matcher.find()) {
                    System.out.println(matcher.group(1));
                }
            }
    
  • @Ta / 2022-09-02 / /

    数据格式不能有错

            for (String s : list) {
                String[] split = s.split("\\|");
                if (split.length >= 2)
                    System.out.println(split[1]);
            }

  • @Ta / 2022-09-02 / /
    @yiluo@消失的安装包谢谢大佬们,都试过了,真棒!不过我看了3楼的输出,有种茅塞顿开的感觉!虽然这次只要名称字段,下次可能又是其他字段,我用3楼的,输出到Excel,让用户自己手动删除多余字段,原始数据来源于txt,相当于做了一个txtToExcel的转换image.png(25.13 KB)
  • @Ta / 2022-09-05 / /
    @TabKey9,如果需要Excell公式我可以帮你搞定
  • @Ta / 2022-09-05 / /
    @TabKey9,原始数据来源于txt用Excell的power query很好实现你需要提取的内容,多个txt也可以,只要多个txt格式相同
  • @Ta / 2022-09-05 / /
    @hui214,谢谢,关联两张表
    =VLOOKUP(C:C,Sheet2!A:B,2,FALSE)
    ,用Java写太麻烦了,目前用WPS手动关联的。每天都很充实很忙,就不打算研究power query插件了,况且我是要把功能写进项目里,不是临时使用哪种
  • @Ta / 2022-09-05 / /

    @TabKey9,你的原始需求是啥呀。。总感觉可以有更优雅的方式实现

  • @Ta / 2022-09-05 / /
    @无名啊,原始需求就是,从a.txt截取2个字段,再从b.txt截取3个字段,关联起来,导入数据库
  • @Ta / 2022-09-05 / /

    @TabKey9,你的 a.txt b.txt变成从一开始就生成 a.csv b.csv 嘛?(或者不存在 , "csv里的特殊字符也行)

    这样就可以很方便地用 SQLite 实现了:

    sqlite3 -csv :memory: '.import a.csv a' '.import b.csv b' 'SELECT a.a, a.b, b.c, b.d, b.e FROM a JOIN b ON xxx'
    
  • @Ta / 2022-09-05 / /
    @无名啊,应该不能,客户不懂 
    .csv
    ,有交互页面的 ,我写到项目里的, 前端加按钮,上传文件,后端处理完返回文件名,从静态资源路径下载文件,再从导入按钮上传文件,写入数据库中。整个过程挺麻烦的,入库前还有具体的业务流程
  • @Ta / 2022-09-05 / /

    @TabKey9,你是说,用户上传a.txt,你本身有b.txt,你

    从a.txt截取2个字段,再从b.txt截取3个字段,关联起来

    后,生成 .xls

    用户下载该 .xls,再上传给另一个服务器,由其导入至数据库??

  • @Ta / 2022-09-05 / /
    @无名啊,线上环境,我手里可没有a、b文件,我把功能写给客户让他自己操作的
  • @Ta / 2022-09-05 / /

    @TabKey9,Emm.. 用户上传 a.txt b.txt (用户哪儿来的这俩文件?),你

    从a.txt截取2个字段,再从b.txt截取3个字段,关联起来

    后,生成 .xls,用户下载,上传,你导入??


    感觉你可以在前端完成

    从a.txt截取2个字段,再从b.txt截取3个字段,关联起来

    功能,直接上传给第二个服务器导入至数据库

  • @Ta / 2022-09-06 / /
    @无名啊,那两个文件,可能是是另一家公司某项目数据库导出的表数据,我试了一下,确实可以从数据库导出一模一样的数据,人家怎么数据交互就不管了,客户有需求码农就得实现
  • @Ta / 2022-09-06 / /

    @TabKey9,我只是觉得,你在另一个帖子里,写得代码好复杂。。

    万一需求变动一下,是不是又要改一大片了。。

  • @Ta / 2022-09-07 / /
    @无名啊
    万一需求变动一下,是不是又要改一大片了。。{惊哭}
    ,不会的,那只是一个工具类,不掺杂任何实际的业务需求,考虑兼容更多业务需求,才写成那样的,它的功能仅仅是,把.txt文件解析成.xls文件,传参(待解析的文件.txt,缓存文件夹的绝对路径,原始数据的分隔符,不传最后一个字段就是解析所有列 or 反之则根据参数输出指定列)
  • @Ta / 2022-09-07 / /

    @TabKey9,你不是还要关联a.txt b.txt 的某些字段嘛。。

    要是哪天需求变成了,类似数据库里的 LEFT JOINRIGHT JOINFULL JOIN 咋办

  • @Ta / 2022-09-07 / /
    @无名啊
    你不是还要关联a.txt b.txt 的某些字段嘛。。
    
    要是哪天需求变成了,类似数据库里的 LEFT JOIN、RIGHT JOIN、FULL JOIN 咋办
    那是我的业务需求,工具类不包含这些,我自己用这工具类完成一部分工作,剩下需求的自己完成
添加新回复
回复需要登录