子串字符串,直到第一个字母

时间:2019-10-04 10:51:20

标签: java regex substring

我需要substring字符串(用户输入),直到第一个字母为止。我无法在indexOf中使用正则表达式。我这样尝试过:

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

5 个答案:

答案 0 :(得分:1)

非常简单的解决方案,但这可能有效:

  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));
  }

您首先要寻找字符串中的第一个字母,然后只需将子字符串带入索引中即可。

答案 1 :(得分:1)

使用正则表达式查找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 ...
    }
}

我更喜欢这样做,因为它确实可以满足我的要求(我不想splitreplace,而只是find

答案 2 :(得分:0)

如果您确定您的字符串以数字开头,则可以将其拆分:

lb4 model

请注意,如果它不是以数字开头,则每个不符合\ d的字符的第一个索引都将为空。

答案 3 :(得分:0)

如果您想在首次出现字母之前得到什么,可以使用捕获组来匹配除使用\P{L}的字母以外的任何字符,然后使用\p{L}匹配字母。

^(\P{L}+)\p{L}
  • ^字符串的开头
  • (捕获第1组
    • \P{L}+匹配\p{L}的相反1倍以上
  • )
  • \p{L}匹配来自任何语言的任何字母

Regex demo | Java demo

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

输出

1234

答案 4 :(得分:-2)

这可能对您有用:

A,B,C
100,10,100
2,20,200
3,30,150

在这里,我们先匹配字母和任意字符,然后将匹配项替换为空字符串。