Java , 想请教有没什么方法能对这种字符串转换有高效操作

2020-11-27 09:01:58 +08:00
 IMCA1024

现在有一段类似这样的格式 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(",")切割出 时间戳 以及 角色标识。

有没什么其他高效方法,对字符串操作不太熟悉

1367 次点击
所在节点    问与答
6 条回复
liuxey
2020-11-27 09:19:17 +08:00
“高效“的做法就是把你的这段处理过程写成工具类,然后:
String json = Util.parse(text).toJSON();
完美!
正经来说,查看下你的这段 Text 是否是某种标准协议的报文,一般都有 Java 解析库的,如果不是标准的那么你自己实现也是 OK 的,主要关注下有没有边界情况和异常情况导致 BUG ;
msg7086
2020-11-27 09:20:43 +08:00
可以用正则,但是处理是少不了的。能做的就是让代码尽可能清晰,方便维护。
IMCA1024
2020-11-27 09:20:53 +08:00
@liuxey
目前边界情况异常情况 代码里都有处理,我就是觉得这种方法处理起来效率好像挺低的
songzblin
2020-11-27 10:08:05 +08:00
利用了正则表达式,希望有帮助
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("] ",""));
}
yunyi93
2020-11-27 11:23:06 +08:00
一般情况,JSON 映射就可以了
tairan2006
2020-11-27 13:22:57 +08:00
老实讲,正则说不定还没 split 快…你要自己测一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/729704

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX