我在从每个字符串行中提取术语时遇到严重问题。更具体地说,我有一个 csv 格式的文件,它实际上不是 csv 格式(它将所有术语仅保存到行 [0] 中)
所以,这只是数千个字符串行中的示例字符串行:
(split() 不起作用。!!!)
测试.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()
函数。
例如,在第一行中,我会得到“β-硫辛酸”而不是“β-硫辛酸。**
最佳答案
这是使用字符串分割和索引来解决您的问题的解决方案,
import java.util.ArrayList;
public class StringSplit {
public static void main(String[] args) {
String[] seperatedStr = null;
int fourthStrIndex = 0;
String modifiedStr = null, finalStr = null;
ArrayList<String> strList = new ArrayList<String>();
strList.add("31451 CID005319044 15939353 C8H14O3S2 beta-lipoic acid C1C[S@](=O)S[C@@H]1CCCCC(=O)O ");
strList.add("12232 COD05374044 23439353 C924O3S2 saponin CCCC(=O)O ");
strList.add("9048 CTD042032 23241 C3HO4O3S2 Berberine [C@@H]1CCCCC(=O)O ");
for (String item: strList) {
seperatedStr = item.split("\\s+");
fourthStrIndex = item.indexOf(seperatedStr[3]) + seperatedStr[3].length();
modifiedStr = item.substring(fourthStrIndex, item.length());
finalStr = modifiedStr.substring(0, modifiedStr.indexOf(seperatedStr[seperatedStr.length - 1]));
System.out.println(finalStr.trim());
}
}
}
输出:
β-硫辛酸
皂苷
小檗碱
关于java - 如何从 Java 字符串中提取特定术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355634/