Как вырезать строку с двумя регулярными выражениями "_" и "." - PullRequest
1 голос
/ 26 мая 2010

у меня есть такая строка test_1.doc, и я хочу разбить эту строку, чтобы иметь 1.doc

Ответы [ 4 ]

8 голосов
/ 26 мая 2010
str.split("_")[1]
4 голосов
/ 26 мая 2010

Всегда консультируйтесь с 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]"
2 голосов
/ 26 мая 2010

str.split("[_.]") будет разделен на оба критерия. Я не уверен, почему название вашего вопроса и его тело отличаются, хотя ...

0 голосов
/ 26 мая 2010

Что именно вы имеете в виду? Вы можете просто сделать это:

String s = "test_1.doc";
String[] result = s.split("_");

result будет содержать два элемента, содержащие «test» и «1.doc».

...