Всегда консультируйтесь с API для такого рода вещей. String
было бы хорошим местом для начала, а split
- хорошее ключевое слово для поиска, и действительно, вы найдете это:
public String[] split(String regex)
: разбивает эту строку вокруг совпадений заданного регулярного выражения.
System.out.println(java.util.Arrays.toString(
"a b c".split(" ")
)); // prints "[a, b, c]"
System.out.println(java.util.Arrays.toString(
"a_b_c".split("_")
)); // prints "[a, b, c]"
Имейте в виду, что метасимволы регулярных выражений (такие как точка .
), возможно, должны быть экранированы:
System.out.println(java.util.Arrays.toString(
"a.b.c".split(".")
)); // prints "[]"
System.out.println(java.util.Arrays.toString(
"a.b.c".split("\\.")
)); // prints "[a, b, c]"
Вот пример доступа к отдельным частям возвращенного String[]
:
String[] parts = "abc_def.ghi".split("_");
System.out.println(parts[1]); // prints "def.ghi"
Что касается того, что вы хотите, это не ясно, но это может быть что-то вроде этого:
System.out.println(java.util.Arrays.toString(
"abc_def.ghi".split("[._]")
)); // prints "[abc, def, ghi]"
Также возможно, что вы заинтересованы в ограниченном разделении:
System.out.println(java.util.Arrays.toString(
"abc_def_ghi.txt".split("_", 2)
)); // prints "[abc, def_ghi.txt]"
Еще одна возможность состоит в том, что вы хотите разделить на последние _
. Вы все еще можете сделать это с помощью регулярных выражений, но вместо этого гораздо проще использовать lastIndexOf
:
String filename = "company_secret_128517.doc";
final int k = filename.lastIndexOf('_');
String head = filename.substring(0, k);
String tail = filename.substring(k+1);
System.out.printf("[%s] [%s]", head, tail);
// prints "[company_secret] [128517.doc]"