У меня есть String
называется filename
:Почему для разделения на период требуется двойная обратная косая черта?
filename = "z_cams_c_ecmf_20170217000000_prod_fc_pl_015_aermr04.nc";
Когда я пытаюсь разделить filename
, чтобы получить имя переменной aermr04.nc
, я попытался следующие:
String varibleName = filename.split("_")[9].split(".")[0];
выше строка кода выдает IndexOutOfBoundsException
,
Почему?
я могу получить его буксировать работу с помощью:
String varibleName = filename.split("_")[9].split("\\.")[0];
Тем не менее, кажется, довольно глупо, что я должен возиться с такими тривиальными задачами ...
Любая идея, почему 2-й пример работает ? В чем причина такого синтаксиса?
Поскольку период '.', в регулярных выражениях, означает«любой символ». Таким образом, в течение буквального периода он должен быть экранирован (то есть с предшествующей обратной косой чертой). Но так как обратная косая черта '\' в строке должна быть экранирована, она становится '' \\. "'. – AntonH
@yshavit Ха, это так. Позвольте мне разбудить это :) – AntonH
Обратите внимание, что вы можете сделать это без регулярного выражения или создания всех ненужных строк и массивов с помощью 'String varibleName = filename.substring (filename.lastIndexOf ('_'), filename.lastIndexOf ('.'))) '(предполагая, что на самом деле это последние' _' и '.' в вашей строке). –