Подстрока Строка до первой буквы - PullRequest
0 голосов
/ 04 октября 2019

Мне нужно substring Строка (ввод пользователя) до первой буквы. Я не могу использовать регулярные выражения в indexOf. Я пытался так:

String stringValue = input.substring(0, input.indexOf([^\\d.]));

Ответы [ 5 ]

1 голос
/ 04 октября 2019

Найти первую букву в String с помощью регулярного выражения;ничего особенного, никаких трюков :

private static final Pattern LETTER = Pattern.compile("[a-zA-Z]");  
        // or "\\p{Alpha}", or "\\p{L}", or whatever is needed

// inentionally throws NullPointerException if argument is null
public static int findFirstLetter(String text) {
    var matcher = LETTER.matcher(text);
    if (matcher.find()) {
        return matcher.start();
    } else {
        return -1;  // or throw exception, or ...
    }
}

Я предпочитаю это, так как он делает именно то, что я хочу (я не хочу split или replace что-либо, просто find)

1 голос
/ 04 октября 2019

Довольно простое решение, но это может сработать:

  public static void main(String[] args) {
    String s = "1248941e189d1";
    int index = -1, i = 0;

    for (char c : s.toCharArray()) {
        if (Character.isLetter(c)) {
            index = i;
            break;
        }
        i++;
    }
    System.out.println(s.substring(0, index));
  }

Сначала вы ищете первую букву в строке, а затем просто берете подстроку до ее индекса.

0 голосов
/ 04 октября 2019

Если вы хотите получить то, что находится до первого вхождения буквы, вы можете использовать группу захвата, чтобы сопоставить любой символ, кроме буквы, используя \P{L}, а затем сопоставить букву, используя \p{L}.

^(\P{L}+)\p{L}
  • ^ Начало строки
  • ( Захват группа 1
    • \P{L}+ Совпадение 1+ раз противоположное \p{L}
  • )
  • \p{L} Соответствует любой букве на любом языке

Regex demo | Java демо

Pattern pattern = Pattern.compile("^(\\P{L}+)\\p{L}");
Matcher matcher = pattern.matcher("1234x");
if (matcher.find()) {
    System.out.println(matcher.group(1));
}

Вывод

1234
0 голосов
/ 04 октября 2019

Если вы точно знаете, что ваша строка начинается с цифр, вы можете просто разделить ее:

String input = "1234x";
System.out.println(input.split("[^\\d.]")[0]); //1234

Обратите внимание, что если она не начинается с цифр, первые индексы будут пустыми для каждого символа, который нене соответствует \ d.

0 голосов
/ 04 октября 2019

Это может работать для вас:

jshell> s
s ==> " 123abc"

jshell> s.replaceAll("[a-zA-Z]{1}.*", "")
$6 ==> " 123"

Здесь мы сопоставляем букву, за которой следует любой символ, и заменяем совпадение пустой строкой.

...