
现在有一段类似这样的格式 String
[0:1.520,0:2.460,0] 喂,你好。 [0:4.300,0:7.920,0] xxxxxxxx [0:8.750,0:10.440,0] xxxxxxxx [0:10.690,0:16.460,0] xxxxxxxxxx 。 []里面的 第一位是开始时间戳,第二位是结束时间戳,第三位是角色标识。 后面跟着的是文本内容
要转换成这种:
[ {"begin":1000,"end":2000,"role":"角色 1","words":" xxxx"}, {"begin":4000,"end":6000,"role":"角色 1","words":" xxxxx 。"}, {"begin":8000,"end":9000,"role":"角色 2","words":" xxxxxx 。"}, {"begin":12000,"end":13000,"role":"角色 2","words":" xxxxxx"}, ] 目前我是非常低效的做法: 先根据换行符 spilit("\n");切割出每一行
比如一行: [0:1.520,0:2.460,0] 喂,你好
然后 splitResult[0] 就是 整个[0:1.520,0:2.460,0] 内容 ,splitResult[1]就是文本内容 再对 splitResult[0] 进行处理, subString 出 0:1.520,0:2.460,0 然后再用 split(",")切割出 时间戳 以及 角色标识。
有没什么其他高效方法,对字符串操作不太熟悉
1 auin 2020 年 11 月 27 日 “高效“的做法就是把你的这段处理过程写成工具类,然后: String json = Util.parse(text).toJSON(); 完美! 正经来说,查看下你的这段 Text 是否是某种标准协议的报文,一般都有 Java 解析库的,如果不是标准的那么你自己实现也是 OK 的,主要关注下有没有边界情况和异常情况导致 BUG ; |
2 msg7086 2020 年 11 月 27 日 可以用正则,但是处理是少不了的。能做的就是让代码尽可能清晰,方便维护。 |
4 songzblin 2020 年 11 月 27 日 利用了正则表达式,希望有帮助 String sourceInfo = "[0:1.520,0:2.460,0] 喂,你好。"; String TimeRegex = "\\d+:\\d+.\\d+"; Pattern pattern = Pattern.compile(TimeRegex); Matcher matcher = pattern.matcher(sourceInfo); while (matcher.find()) { // 两个时间 System.out.println(matcher.group()); } String roleRegex = ",\\d+]"; pattern = Pattern.compile(roleRegex); matcher = pattern.matcher(sourceInfo); while (matcher.find()) { // 身份 System.out.println(matcher.group().replaceAll(",|]", "")); } String infoRegex = "] .*"; pattern = Pattern.compile(infoRegex); matcher = pattern.matcher(sourceInfo); while (matcher.find()) { // 信息 System.out.println(matcher.group().replaceAll("] ","")); } |
5 yunyi93 2020 年 11 月 27 日 一般情况,JSON 映射就可以了 |
6 tairan2006 2020 年 11 月 27 日 老实讲,正则说不定还没 split 快…你要自己测一下 |