我在从每个字符串行中提取术语时遇到严重问题。更具体地说,我有一个 csv 格式的文件,它实际上不是 csv 格式(它将所有术语仅保存到行 [0] 中)
所以,这只是数千个字符串行中的示例字符串行:
测试.csv
"31451 CID005319044 15939353 C8H14O3S2 beta-lipoic acid C1C[S@](=O)S[C@@H]1CCCCC(=O)O "
"12232 COD05374044 23439353 C924O3S2 saponin CCCC(=O)O "
"9048 CTD042032 23241 C3HO4O3S2 Berberine [C@@H]1CCCCC(=O)O "
我只想提取位于第 5 位的“β-硫辛酸”、“皂苷” 和 “小檗碱”。 你可以看到术语之间有很大的空格,所以这就是我说第五个位置的原因。
在这种情况下,如何提取每行位于第 5 个位置的术语?
还有一件事:六个术语之间的空格长度并不总是相等。长度可以是一、二、三、四、五或类似的值。
因为空格的长度是随机的,所以我无法使用 .split()
函数。
例如,在第一行中,我会得到“β-硫辛酸”而不是“β-硫辛酸。**
最佳答案
为此提供算法:
- 阅读文件的每一行。
- 对于每一行,请阅读:
- 用分隔符分割(不确定是空格还是制表符
\t
字符,这取决于您的文件内容)。 - 检索第 5 个元素。
- 将其存储在一个集合中,通常是
List<String>
.
- 用分隔符分割(不确定是空格还是制表符
您可以使用 Scanner
轻松完成此操作类:
List<String> desiredContent = new ArrayList<>();
Scanner scanner = new Scanner(new File("/path/to/file.csv"));
while (scanner.hasNext()) {
String line = scanner.nextLine();
String[] contents = line.split(" ");
desiredContent.add(contents[4]);
}
关于java - 如何从字符串中提取特定术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353676/