已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > Java

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

作者: @Ta

时间: 2022-09-02发布,2022-09-05修改

点击: 7399

某原始数据:(需求:只要车辆品牌名称)
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|隐藏机器人聊天)』

1. 尝试过用正则,实在是弄不出来!
(/@Ta/2022-09-02 18:02//)

2. 截取应该是最快的了,截取的代码可以简化一下,三行
            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 18:19//)

3.

数据格式不能有错

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

(/@Ta/2022-09-02 20:03//)

4. @yiluo@消失的安装包谢谢大佬们,都试过了,真棒!不过我看了3楼的输出,有种茅塞顿开的感觉!虽然这次只要名称字段,下次可能又是其他字段,我用3楼的,输出到Excel,让用户自己手动删除多余字段,原始数据来源于txt,相当于做了一个txtToExcel的转换image.png(25.13 KB)
(/@Ta/2022-09-02 20:53//)

5. @TabKey9,如果需要Excell公式我可以帮你搞定
(/@Ta/2022-09-05 17:12//)

6. @TabKey9,原始数据来源于txt用Excell的power query很好实现你需要提取的内容,多个txt也可以,只要多个txt格式相同
(/@Ta/2022-09-05 17:16//)

7. @hui214,谢谢,关联两张表
=VLOOKUP(C:C,Sheet2!A:B,2,FALSE)
,用Java写太麻烦了,目前用WPS手动关联的。每天都很充实很忙,就不打算研究power query插件了,况且我是要把功能写进项目里,不是临时使用哪种
(/@Ta/2022-09-05 22:20//)

8.

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

(/@Ta/2022-09-05 22:22//)

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

10.

@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 22:43//)

11. @无名啊,应该不能,客户不懂 
.csv
,有交互页面的 ,我写到项目里的, 前端加按钮,上传文件,后端处理完返回文件名,从静态资源路径下载文件,再从导入按钮上传文件,写入数据库中。整个过程挺麻烦的,入库前还有具体的业务流程
(/@Ta/2022-09-05 22:47//)

12.

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

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

后,生成 .xls

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

(/@Ta/2022-09-05 22:56//)

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

14.

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

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

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


感觉你可以在前端完成

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

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

(/@Ta/2022-09-05 23:20//)

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

16.

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

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

(/@Ta/2022-09-06 14:53//)

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

18.

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

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

(/@Ta/2022-09-07 12:02//)

19. @无名啊
你不是还要关联a.txt b.txt 的某些字段嘛。。

要是哪天需求变成了,类似数据库里的 LEFT JOIN、RIGHT JOIN、FULL JOIN 咋办
那是我的业务需求,工具类不包含这些,我自己用这工具类完成一部分工作,剩下需求的自己完成
(/@Ta/2022-09-07 12:05//)

下一页 1/2页,共24楼

回复需要登录

7月18日 07:52 星期五

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1