从每个字符串行中提取术语时遇到严重问题。更具体地说,我有一个csv格式的文件,实际上不是csv格式(它只将所有术语保存到行[0]中)
所以,这里只是数千个字符串行中的示例字符串:
test.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个位置的原因。
在这种情况下,如何为每行提取位于第5位的术语?
还有一件事:六个术语中每个术语之间的空白长度并不总是相等。长度可以是一,二,三,四,或五,或类似的东西。
因为空格的长度是随机的,所以我不能使用.split()
函数。
例如,在第一行我会得到“β-硫辛酸”而不是“β-硫辛酸”。**
答案 0 :(得分:2)
为此提供算法:
\t
字符,具体取决于您的文件内容。)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]);
}
答案 1 :(得分:0)
您可以使用扫描仪和下一种方法。
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
http://www.tutorialspoint.com/java/util/scanner_next.htm
希望这会让你走上正轨!
答案 2 :(得分:0)
您可以使用字符串的分割方法..
首先,您需要逐行获取字符串...
示例:
String [] result = scanner.nextLine().split(" ");
System.out.print(result[4]);
split将为您提供每个空格分割的字符串数组。 index 4表示您想要的字符串的第5个位置
答案 3 :(得分:0)
您可以尝试使用正则表达式。
List<String> extracted = new ArrayList<String>();
Scanner scanner = new Scanner(new File("filepath/file.csv"));
while (scanner.hasNext())
{
String line = scanner.nextLine();
String[] contents = line.split("\\s\\s+"); //matches two or more whitespace characters
extracted.add(contents[4]);
}
\\s\\s+
只会在有两个以上空格的地方拆分。
注意:这包括标签,因此如果只有一个标签,则会被忽略。