我正在使用ADFA-LD数据集进行基于主机的入侵检测项目,现在我正在进行特征提取模块。我构建了短语词典,其中包含长度为4的系统调用短语。现在,对于特征提取,我需要将短语与新的系统调用跟踪进行比较(以下是一些示例):
sys_clock_gettime sys_poll sys_poll sys_clock_gettime sys_poll sys_poll sys_poll sys_clock_gettime sys_poll sys_clock_gettime sys_poll sys_poll sys_poll sys_poll sys_poll sys_poll sys_poll sys_poll sys_socketcall .......
我需要的是,如何将这些短语与新痕迹进行比较。我在做java。
我的短语词典:
sys_socketcall-sys_poll-sys_clock_gettime-sys_poll
sys_clock_gettime-sys_poll-sys_poll-sys_socketcall
sys_poll-sys_socketcall-sys_poll-sys_clock_gettime
sys_poll-sys_clock_gettime-sys_clock_gettime-sys_clock_gettime
sys_clock_gettime-sys_clock_gettime-sys_socketcall-sys_clock_gettime
sys_socketcall-sys_clock_gettime-sys_poll-sys_poll
sys_poll-sys_poll
我使用' - '作为分隔符来比较这些短语和新的痕迹,所以我用' - '加入了独特的系统调用。
答案 0 :(得分:1)
好像你想要的单词被空格分开了。在这种情况下,只需逐行阅读您的文件,然后使用String.split(" ")
获取您的文字。
这是我可能想到的那个:
public class FileSplitter {
public static void main(String[] args) throws IOException {
File file = new File("input_file.txt");
LinkedList<String> words = new LinkedList<String>();
int i = 0;
Files.lines(file.toPath()).
forEachOrdered(line -> words.
addAll(Arrays.asList(line.split(" "))));
for(String word:words){
if(word.trim().length() > 0){
System.out.print(word.trim() + " ");
if(i++ >= 3){
System.out.println();
i = 0;
}
}
}
}
}
对于您的示例,它返回:
sys_clock_gettime sys_poll sys_poll sys_clock_gettime
sys_poll sys_poll sys_poll sys_clock_gettime
sys_poll sys_clock_gettime sys_poll sys_poll
sys_poll sys_poll sys_poll sys_poll
sys_poll sys_poll sys_socketcall