如何从输入字符串中提取数字值?
例如,输入字符串可能是这样的:
String str="abc d 1234567890pqr 54897";
我只想要数字值,例如"1234567890"
和"54897"
。所有的字母和特殊字符都将被丢弃。
public static List<String> extractNumbers(String string) {
List<String> numbers = new LinkedList<String>();
char[] array = string.toCharArray();
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < array.length; i++) {
if (Character.isDigit(array[i])) {
stack.push(array[i]);
} else if (!stack.isEmpty()) {
String number = getStackContent(stack);
stack.clear();
numbers.add(number);
}
}
if(!stack.isEmpty()){
String number = getStackContent(stack);
numbers.add(number);
}
return numbers;
}
private static String getStackContent(Stack<Character> stack) {
StringBuilder sb = new StringBuilder();
Enumeration<Character> elements = stack.elements();
while (elements.hasMoreElements()) {
sb.append(elements.nextElement());
}
return sb.toString();
}
public static void main(String[] args) {
String str = " abc d 1234567890pqr 54897";
List<String> extractNumbers = extractNumbers(str);
for (String number : extractNumbers) {
System.out.println(number);
}
}
您可以按空格拆分字符串以获取各个条目,循环遍历它们,并尝试使用Integer
上的相关方法解析它们,使用try
/catch
方法处理解析数字失败的情况。这可能是最直接的方法。
或者,您可以构造一个正则表达式来匹配仅数字并使用它来找到所有数字。对于大字符串,这可能更具性能。正则表达式将类似于`\b\d+\b'。
更新:或者,如果这不是作业或类似内容(我有点假设您正在寻找实现它自己的线索,但这可能无效),您可以使用@npinti提供的解决方案。那可能是您在生产代码中应采取的方法。
1234567890 pqr
,而不是 1234567890pqr
。 - Hank Gay public static String convertBudgetStringToPriceInteger(String budget) {
if (!AndroidUtils.isEmpty(budget) && !"0".equalsIgnoreCase(budget)) {
double numbers = getNumericFromString(budget);
if( budget.contains("Crore") ){
numbers= numbers* 10000000;
}else if(budget.contains("Lac")){
numbers= numbers* 100000;
}
return removeTrailingZeroesFromDouble(numbers);
}else{
return "0";
}
}
从字母数字混合字符串中获取数值
public static double getNumericFromString(String string){
try {
if(!AndroidUtils.isEmpty(string)){
String commaRemovedString = string.replaceAll(",","");
return Double.parseDouble(commaRemovedString.replaceAll("[A-z]+$", ""));
/*return Double.parseDouble(string.replaceAll("[^[0-9]+[.[0-9]]*]", "").trim());*/
}
}catch (NumberFormatException e){
e.printStackTrace();
}
return 0;
}
public class ExtractNum
{
public static void main(String args[])
{
String input = "abc d 1234567890pqr 54897";
String digits = input.replaceAll("[^0-9.]","");
System.out.println("\nGiven Number is :"+digits);
}
}
String str = "abc34bfg 56tyu";
str = str.replaceAll("[^0-9]","");
输出:3456
String str = "abc d 1234567890pqr 54897";
str = str.replaceAll("[^\\d ]", "");