Допустим, у меня есть запутанным имя, например XX_10231_11_32-33-23_jsv.doc
Java разборе файла
Как извлечь только 11 из этого файла?
настоящее время я использую
filename.split("_", 3)[2];
извлекает все прошлые 11.
Допустим, у меня есть запутанным имя, например XX_10231_11_32-33-23_jsv.doc
Java разборе файла
Как извлечь только 11 из этого файла?
настоящее время я использую
filename.split("_", 3)[2];
извлекает все прошлые 11.
Почему не просто split("_")[2]
вместо split("_", 3)[2]
?
String filename="XX_10231_11_32-33-23_jsv.doc";
System.out.println(filename.split("_")[2]);//output 11
В любом случае, если вы хотите, чтобы "оптимизировать" split
метод и остановить расщепление после 11
split("_", 4)
затем использовать. Он будет производить четыре элемента массива, который будет содержать
["XX", "10231", "11", "32-33-23_jsv.doc"]
Проблема здесь является выбор 3
для предела. Это означает, что все прошлое второго найденного разделителя будет в третьем знаке. Используйте отрицательный предел, чтобы не было предела количеству токенов в возвращаемом массиве.
filename.split("_", -1)
Согласно split
Javadocs:
Предел параметр контролирует количество раз шаблон применяется и, следовательно, влияет на длину результирующего массива. Если предел n больше нуля, тогда шаблон будет применен к наиболее n - 1 раз, длина массива будет не больше n, а последняя запись массива будет содержать все входные данные за последним сопоставленным разделителем . Если n равно неположительным, то шаблон будет применяться как как можно больше раз, и массив может иметь любую длину. Если n равно нулю , тогда шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.
(курсив мой)
Или просто вызовите' split() 'без параметра предела:' split ("_") ' – iamnotmaynard
@iamnotmaynard Да, это было бы проще. Но я также хотел указать, что делает параметр 'limit'. – rgettman
Это хорошо, так как это объясняет результаты ОП. – iamnotmaynard
Regex .. '. *? _. *? _ (. *?) _. *' – vidit
@vidit ответ является 'раскол()'. – CPerkins
используйте метод split (String regex) без ограничения. например filename.split ("_") [2]; – nikkatsa