我有一个Java String对象.我只需从中提取数字.我举个例子:
"123-456-789" 我想要 "123456789"
是否有只提取数字的库函数?
谢谢你的回答.在我尝试这些之前,我需要知道是否必须安装任何额外的llibraries?
cod*_*ict 517
您可以使用正则表达式并删除非数字.
str = str.replaceAll("\\D+","");
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 47
这是一个更详细的解决方案.不太优雅,但可能更快:
public static String stripNonDigits(
final CharSequence input /* inspired by seh's comment */){
final StringBuilder sb = new StringBuilder(
input.length() /* also inspired by seh's comment */);
for(int i = 0; i < input.length(); i++){
final char c = input.charAt(i);
if(c > 47 && c < 58){
sb.append(c);
}
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
public static void main(final String[] args){
final String input = "0-123-abc-456-xyz-789";
final String result = stripNonDigits(input);
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0123456789
顺便说一句:我没有使用Character.isDigit(ch),因为它接受除0 - 9之外的许多其他字符.
dog*_*ane 21
public String extractDigits(String src) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < src.length(); i++) {
char c = src.charAt(i);
if (Character.isDigit(c)) {
builder.append(c);
}
}
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
Emi*_*mil 20
使用Google Guava:
CharMatcher.inRange('0','9').retainFrom("123-456-789")
Run Code Online (Sandbox Code Playgroud)
更新:
使用预计算CharMatcher可以进一步提高性能
CharMatcher ASCII_DIGITS=CharMatcher.inRange('0','9').precomputed();
ASCII_DIGITS.retainFrom("123-456-789");
Run Code Online (Sandbox Code Playgroud)
小智 15
input.replaceAll("[^0-9?!\\.]","")
Run Code Online (Sandbox Code Playgroud)
这将忽略小数点.
例如:如果你有一个输入的445.3kg输出会445.3.
Bjo*_*rnS 11
使用Google Guava:
CharMatcher.DIGIT.retainFrom("123-456-789");
Run Code Online (Sandbox Code Playgroud)
CharMatcher是可插拔的,使用起来非常有趣,例如,您可以执行以下操作:
String input = "My phone number is 123-456-789!";
String output = CharMatcher.is('-').or(CharMatcher.DIGIT).retainFrom(input);
Run Code Online (Sandbox Code Playgroud)
输出== 123-456-789
使用正则表达式来满足您的要求.
String num,num1,num2;
String str = "123-456-789";
String regex ="(\\d+)";
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
num = matcher.group();
System.out.print(num);
}
Run Code Online (Sandbox Code Playgroud)
我受到代码肖恩·帕特里克·弗洛伊德(Sean Patrick Floyd)的启发,几乎没有重写它,以获取最佳性能。
public static String stripNonDigitsV2( CharSequence input ) {
if (input == null)
return null;
if ( input.length() == 0 )
return "";
char[] result = new char[input.length()];
int cursor = 0;
CharBuffer buffer = CharBuffer.wrap( input );
while ( buffer.hasRemaining() ) {
char chr = buffer.get();
if ( chr > 47 && chr < 58 )
result[cursor++] = chr;
}
return new String( result, 0, cursor );
}
Run Code Online (Sandbox Code Playgroud)
我用最少的数字对非常长的字符串进行性能测试,结果是:
顺便说一句,这取决于该字符串有多长。对于仅包含6个数字的字符串,番石榴慢50%,正则表达式慢1倍
小智 5
public class FindDigitFromString
{
public static void main(String[] args)
{
String s=" Hi How Are You 11 ";
String s1=s.replaceAll("[^0-9]+", "");
//*replacing all the value of string except digit by using "[^0-9]+" regex.*
System.out.println(s1);
}
}
Run Code Online (Sandbox Code Playgroud)
输出: 11
使用 Kotlin 和 Lambda 表达式,您可以这样做:
val digitStr = str.filter { it.isDigit() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
260653 次 |
| 最近记录: |