如何让substring()读取一个字符串直到某个字符?

时间:2016-02-08 23:13:04

标签: java string substring

我想创建一个子字符串说:

String s1 = "derp123";

s2 = s1.substring(0, *index where there's a number*);

除了使用replaceAll方法之外,我有什么办法可以实现这个目标吗?

我不想替换字符串中的所有数字,我想在方法检测到数字0-9后停止读取字符串。

3 个答案:

答案 0 :(得分:2)

这就是你想要的。

String s1 = "derp123";
String patternStr = "[0-9]";
Matcher matcher = Pattern.compile(patternStr).matcher(s1);
if (matcher.find()) {
   System.out.println(s1.substring(0, matcher.start()));
}

这将为您提供没有数字的字符串部分

答案 1 :(得分:2)

为此,正则表达式是你的朋友。

我只会向您展示示例的代码,但您应该了解有关正则表达式的功能(和限制)的更多信息。请参阅Pattern的javadoc。

String s1 = "derp123";
Matcher m = Pattern.compile("^\\D*").matcher(s1);
if (m.find())
    System.out.println(m.group()); // prints: derp

请注意,评论中显示的replaceAll()方法也使用正则表达式。

答案 2 :(得分:1)

由于OP说他不想使用replace因此正则表达式这是我的建议。请注意,已经给出的REGEX版本更优雅,我认为我只是提供这个以显示其他方式这样做。

String s1 = "blahblah1234";
String s2 = s1.substring(0, firstNumberPos(s1));
System.out.println(s2);

firstNumberPos定义

public static int firstNumberPos(String str){
    for ( int i=0; i<str.length(); i++ ){
        if ( str.charAt(i) >= '0' && str.charAt(i) <= '9'){
            return i;
        }
    }
    return str.length();
}

请注意,我不关心零点,你仍然需要检查它。