按序分组再分组统计
【问题】
用java读入、修改、再把修改后的数据写入新txt,希望写入新txt的结果是所有的相邻字母对出现的次数(ab=次,ba=次,aa=次,等等),原始数据中的*和#分别表示字母串的开始和结束。
我是Java初学者,请大家帮忙,写一个可以直接运行并且初学者能读懂的代码,关键部分给出注释。感谢大家热心帮忙。
源txt部分数据(都是这种格式):
*
a
b
#
*
a
b
b
#
*
a
a
b
c
#
*
a
c
c
b
#
*
d
#
*
a
d
b
a
d
d
c
#
【回答】
Java写这个很繁琐,用可嵌入JAVA的SPL实现会简单许多:
A |
|
1 |
=file("E:\\s.txt").import@i() |
2 |
=A1.select(~!="#").group@i(~=="*") |
3 |
=A2.conj(~.([~[-1],~]).to(3,)) |
4 |
=A3.groups(~:a;count(~):b) |
5 |
=A4.new(a.concat()+"="+string(b)+"次") |
6 |
=file("E:\\result.txt").export(A5) |
A1:读取s.txt中的内容。
A2:依次选取非“#”字符,再对数据进行分组,每组数据以“*”开头。
A3:针对每组数据,取前一个成员与当前成员组成一个序列,并选出第3个及其之后的序列,最后进行和列。
A4:分组统计每个序列出现的次数。
A5:对A4数据进一步处理。
A6:将A5导出到指定文件。
这段代码可以方便地集成进Java(可参考Java 如何调用 SPL 脚本)。