Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字符串行中提取特定术语?_Java_Text - Fatal编程技术网

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

Java 如何从字符串行中提取特定术语?,java,text,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    s

我在从每个字符串行提取术语时遇到了一个严重的问题。更具体地说,我有一个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位的术语

还有一件事:六个术语之间的空格长度并不总是相等的。长度可以是一、二、三、四、五,或者类似的。 因为空格的长度是随机的,所以我不能使用
.split()
函数。
例如,在第一行中,我得到的是“β-硫辛酸”,而不是“β-硫辛酸”。*

您可以使用扫描仪和下一种方法


希望这能让您走上正轨!

为此提供算法:

  • 阅读文件的每一行
  • 对于每一行,请阅读:
    • 按分隔符拆分(不确定是否为空格或制表符
      \t
      字符,这取决于文件内容)
    • 检索第5个元素
    • 将其存储在集合中,通常为
      列表
您可以使用
扫描仪
类轻松完成此操作:

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]);
}
List desiredContent=new ArrayList();
Scanner Scanner=new Scanner(新文件(“/path/to/File.csv”);
while(scanner.hasNext()){
字符串行=scanner.nextLine();
String[]contents=line.split(“”);
添加(目录[4]);
}

您可以使用字符串的拆分方法

首先,您需要逐行获取字符串

例如:

  String [] result = scanner.nextLine().split(" ");
   System.out.print(result[4]);
split将为您提供一个字符串数组,该数组在每个空格中被拆分。。
索引4表示所需字符串的第5个位置

您可以尝试使用正则表达式

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]);
}
List extracted=new ArrayList();
Scanner Scanner=new Scanner(新文件(“filepath/File.csv”);
while(scanner.hasNext())
{
字符串行=scanner.nextLine();
String[]contents=line.split(\\s\\s+);//匹配两个或多个空白字符
摘录.增加(内容[4]);
}
\\s\\s+
仅当有两个以上的空格时才会拆分

注意:这包括选项卡,因此如果只有一个选项卡,它将被忽略。

那么.“β-硫辛酸”会发生什么?它将是“β-硫辛酸”和“酸”对吗?是的…酸从我想要的东西中移除。。