我想创建一个子字符串说:
String s1 = "derp123";
s2 = s1.substring(0, *index where there's a number*);
除了使用replaceAll方法之外,我有什么办法可以实现这个目标吗?
我不想替换字符串中的所有数字,我想在方法检测到数字0-9
后停止读取字符串。
答案 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();
}
请注意,我不关心零点,你仍然需要检查它。