Java 在x个制表符后拆分字符串
我必须从.txt文件中分离一个值。 我创建了一个LineNumberReader并使用.split(“\t”)分隔单词,但我只需要最后一个值(q值)。 是否有指定.split()的选项 这是我的.txt文件Java 在x个制表符后拆分字符串,java,string,split,Java,String,Split,我必须从.txt文件中分离一个值。 我创建了一个LineNumberReader并使用.split(“\t”)分隔单词,但我只需要最后一个值(q值)。 是否有指定.split()的选项 这是我的.txt文件 test_id gene_id gene locus sample_1 sample_2 status value_1 value_2 log2(fold_change) test_stat p_value q_value significant XLOC_0
test_id gene_id gene locus sample_1 sample_2 status value_1 value_2 log2(fold_change) test_stat p_value q_value significant
XLOC_000001 XLOC_000001 TC012951 ChLG10:20399-27664 naive BttO NOTEST 0 0.0498691 1.79769e+308 1.79769e+308 0.210754 1 no
您可以使用该方法在要提取的列之后停止拆分,并在一行代码中获取所需的字符串:
String line = "A\tB\tC\tD\tE\tF"; // tab separated content
int column = 3; // specify the column you want (first is 1)
String content = line.split("\t", column + 1)[column - 1]; // get content
System.out.println(content); // prints C (3rd column)
如果您有这一行:
XLOC_000001 XLOC_000001 TC012951 ChLG10:20399-27664 naive BttO NOTEST 0 0.0498691 1.79769e+308 1.79769e+308 0.210754 1 no
您需要1
(倒数第二个元素)
您可以使用以下表达式:
String s ="XLOC_000001 XLOC_000001 TC012951\tChLG10:20399-27664\tnaive\tBttO\tNOTEST\t0\t0.0498691\t1.79769e+308\t1.79769e+308\t0.210754\t1\tno";
Matcher m = Pattern.compile("(?:\t|^)([^\t]*?)\t[^\t]*?(?:\\n|$)").matcher(s);
if(m.find())
System.out.println(m.group(1));
或者,包装在函数中:
private static final Pattern pattern = Pattern.compile("(?:\t|^)([^\t]*?)\t[^\t]*?(?:\\n|$)");
public static final String getPenultimateElement(String line) {
Matcher m = pattern.matcher(line);
if(m.find())
return m.group(1)
return null; // or throw exception.
}
或者,调用方可以指定分隔符:
public static final String getPenultimateElement(String line, String separator) {
separator = Pattern.quote(separator);
Matcher m = Pattern.compile("(?:" separator + "|^)([^" + separator + "]*?)" + separator + "[^" + separator + "]*?(?:\\n|$)").matcher(line);
if(m.find())
return m.group(1)
return null; // or throw exception.
}
这将在斜线t上拆分,而不是在Tab上拆分。感兴趣的值始终位于同一数组位置。要得到这个值并不难,但实际上我生成了一堆不需要的字符串。我在寻找一种减少绳子的方法output@Mirar-可能想在你的问题中提出这一点;没有ESP(特别是在早上的这个时候:))
public static final String getPenultimateElement(String line, String separator) {
separator = Pattern.quote(separator);
Matcher m = Pattern.compile("(?:" separator + "|^)([^" + separator + "]*?)" + separator + "[^" + separator + "]*?(?:\\n|$)").matcher(line);
if(m.find())
return m.group(1)
return null; // or throw exception.
}