Как отделить строку от обратного, где первый символ находится в Java? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть строка типа MH12PE1433. Я пытаюсь найти регулярное выражение, чтобы разделить его с конца, где я получил первый символ, например.

String str1=1433;
String str2=MH12PE;

Я могу разделить последние 4 цифры наиспользуя

String no=MH12PE1433;
if (no.length() > 3) {
                        text2 = no.substring(no.length() - 4);
}

, но хотите разделить с помощью регулярного выражения, где найден первый алфавит.Я надеюсь, вы поняли мой вопрос Спасибо

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать регулярное выражение с цифрами [0-9]+ в конце строки, добавив $ в конце регулярного выражения.

private static final Pattern pattern = Pattern.compile("([0-9]+)$");

private String extractTrailingDigits(String s) {
    Matcher matcher = pattern.matcher(s);
    if (matcher.find()) {
        return matcher.group(1);
    } else {
        return "";
    }
}

private void test() {
    String[] tests = {"MH12PE1433", "MH12PE1433000"};
    for (String test : tests) {
        System.out.println(test + " -> " + extractTrailingDigits(test));
    }
}
0 голосов
/ 28 февраля 2019

Вы можете использовать это регулярное выражение, чтобы разделить, как вы хотите,

(?<=[A-Z])(?=\d+$)

Здесь (?<=[A-Z]) положительный взгляд позади отмечает начало первого алфавита, а (?=\d+$) отмечает начало непрерывных цифр до конца строки, следовательно, давая вам точку внутри строки, которую вы ищете.Просто разделив эту точку, вы получите желаемый результат.

Java-код,

String s = "MH12PE1433";
System.out.println(Arrays.toString(s.split("(?<=[A-Z])(?=\\d+$)")));

Печать,

[MH12PE, 1433]

Вы также можете поиграть с демо здесь

Кроме того, если у вас есть не-алфавитная строка, а не только цифры в конце строки, вы можете более широко использовать это регулярное выражение, которое отделит ваш текст от последнего алфавита (как вы говорите первый алфавит от конца строки).

(?<=[A-Za-z])(?=[^A-Za-z]*$)

Java-код,

List<String> list = Arrays.asList("MH12PE1433","MH12PE@@1123", "MH12PE@@##$$", "MH12Pe5555");
list.forEach(x -> System.out.println(x + " --> " + Arrays.toString(x.split("(?<=[A-Za-z])(?=[^A-Za-z]*$)"))));

Печать,

MH12PE1433 --> [MH12PE, 1433]
MH12PE@@1123 --> [MH12PE, @@1123]
MH12PE@@##$$ --> [MH12PE, @@##$$]
MH12Pe5555 --> [MH12Pe, 5555]
0 голосов
/ 28 февраля 2019

Вы можете попробовать следующее: a.Замените все цифры от конца, используя следующий код, чтобы получить более раннюю строку.б.Замените производную строку на оригинальную, чтобы получить цифры в конце.

String no="MH12PE1433";
    String regex="[0-9]+$";//all ending digits
    String prefix = no.replaceFirst(regex, "");//MH12PE
    String suffix = no.replaceFirst(prefix, "");//1433
0 голосов
/ 28 февраля 2019
String YOURstring="MH12PE1433";
String regex="[0-9]+$";
String FIRSTset= YOURstring.replaceFirst(regex, "");
String SECONDset= YOURstring.replaceFirst(FIRSTset, "");
System.out.println(""+FIRSTset);
System.out.println(""+SECONDset);

ВЫХОД

 MH12PE
 1433
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...