首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字符串中返回数字或字母的第一部分?

如何从字符串中返回数字或字母的第一部分?
EN

Stack Overflow用户
提问于 2014-06-20 13:00:48
回答 3查看 107关注 0票数 0

例如,如果我有(->表示返回):

代码语言:javascript
复制
aBc123afa5  ->  aBc

168dgFF9g  ->  168

1GGGGG  ->  1

我如何在Java中做到这一点?我想这与regex有关,但我对regex并不擅长,所以我不太确定如何实现它(我可以考虑一下,但我有一种感觉,它会有5-10行长,我认为这可以用一条线来完成)。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-20 13:04:52

代码语言:javascript
复制
String myString = "aBc123afa5";
String extracted = myString.replaceAll("^([A-Za-z]+|\\d+).*$", "$1");

查看regex演示实时代码演示

为了提高效率,使用Matcher.group()并重用Pattern

代码语言:javascript
复制
// Class
private static final Pattern pattern = Pattern.compile("^([A-Za-z]+|\\d+).*$");

// Your method
{
    String myString = "aBc123afa5";
    Matcher matcher = pattern.matcher(myString);
    if(matcher.matches())
        System.out.println(matcher.group(1));
}

注意:/^([A-Za-z]+|\d+).*$/^([A-Za-z]+|\d+)/都有相似的效率。在regex101上,您可以比较matcher调试日志来找出这一点。

票数 4
EN

Stack Overflow用户

发布于 2014-06-20 13:09:15

在不使用regex的情况下,您可以这样做:

代码语言:javascript
复制
String string = "168dgFF9g";
String chunk = "" + string.charAt(0);
boolean searchDigit = Character.isDigit(string.charAt(0));
for (int i = 1; i < string.length(); i++) {
  boolean isDigit = Character.isDigit(string.charAt(i));
  if (isDigit == searchDigit) {
    chunk += string.charAt(i);
  } else {
    break;
  }
}
System.out.println(chunk);
票数 1
EN

Stack Overflow用户

发布于 2014-06-20 13:09:31

代码语言:javascript
复制
public static String prefix(String s) {
    return s.replaceFirst("^(\\d+|\\pL+|).*$", "$1");
}

哪里

代码语言:javascript
复制
\\d  = digit
\\pL = letter
postfix + = one or more
|    = or
^    = begin of string
$    = end of string
$1   = first group `( ... )`

一个空的替代方案(最后一个|)确保(...)总是匹配的,并且总是会发生替换。否则,将返回原始字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24327888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档