如何从字符串行中提取特定术语?

时间:2014-04-29 00:51:25

标签: java text

从每个字符串行中提取术语时遇到严重问题。更具体地说,我有一个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()函数。 例如,在第一行我会得到“β-硫辛酸”而不是“β-硫辛酸”。**

4 个答案:

答案 0 :(得分:2)

为此提供算法:

  • 阅读文件的每一行。
  • 读取的每一行:
    • 按分隔符拆分(不确定是否为空格或制表符\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]);
}

答案 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+只会在有两个以上空格的地方拆分。

注意:这包括标签,因此如果只有一个标签,则会被忽略。