Получить ведущие буквенные символы из строки в Java / Groovy - PullRequest
0 голосов
/ 10 марта 2020

Как лучше всего получить начальные буквенные символы из строки, используя Java или Groovy? Есть ли подход, использующий синтаксический анализ regEx, или я должен просто использовать for..l oop, чтобы построить строку с начальными буквенными цифрами, пока не будет найден символ цифры c? Если регулярное выражение, то как будет выглядеть синтаксический анализ для этого.

У меня есть этот тип строки TT1703408513T, и мне нужен только ведущий TT, но ведущая альфа-строка может иметь длину 1-5 символов, пока не будет найдено значение цифры c.

Обновление: это может быть не самый эффективный способ, но он работает.

String i= "TT1703408513T";
String o= "";
for( int x; x<i.length(); x++){
   if( i[x].matches("^[a-zA-Z]") )
      o += i[x];
   else
      break;
}
println o;

Ответы [ 3 ]

1 голос
/ 11 марта 2020

варианты регулярных выражений

String i= "TT1703408513T"

def v1 = ( i=~/^[a-zA-Z]+/ ).find{true}
println v1

def v2 = i.replaceAll("^([a-zA-Z]+).*",'$1')
println v2
0 голосов
/ 11 марта 2020

[Java]

Ниже приведено решение в Java:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String[] testStrs = { "A1703408513T", "AB1703408513T", "ABC1703408513T", "ABCD1703408513T", "ABCDE1703408513T",
                "ABCDEF1703408513T", "ABCDEFG1703408513T", "1703408513T", "2A703408513T", "@1703408513T",
                "!@£$%1703408513T" };
        String regexToMatch = "[a-zA-Z]{1,5}\\d+.*";
        String regexToExtract = "[a-zA-Z]{1,5}";
        Pattern pattern = Pattern.compile(regexToExtract);
        Matcher matcher;
        for (int i = 0; i < testStrs.length; i++) {
            matcher = pattern.matcher(testStrs[i]);
            if (testStrs[i].matches(regexToMatch) && matcher.find()) {
                System.out.println(matcher.group());
            } else {
                System.out.println(testStrs[i] + " does not meet the criteria");
            }
        }
    }
}

Вывод:

A
AB
ABC
ABCD
ABCDE
ABCDEF1703408513T does not meet the criteria
ABCDEFG1703408513T does not meet the criteria
1703408513T does not meet the criteria
2A703408513T does not meet the criteria
@1703408513T does not meet the criteria
!@£$%1703408513T does not meet the criteria
0 голосов
/ 10 марта 2020

Groovy

Дано

String i = "TT1703408513T";

И все допустимые символы:

def chars = ['A'..'Z','a'..'z'].flatten()

Вы можете просто сделать

def prefix = i.takeWhile { it in chars }

Или если вы отчаянно хотите использовать регулярное выражение, вы можете сделать:

def prefix = i.find(/\p{Alpha}+/)

Или действительно:

a.find(/[A-Za-z]+/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...