次の行があるとします。
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
(最後から2番目の要素)
次の式を使用できます。
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.
}