如何在Java中从输入字符串中提取数字值

13

如何从输入字符串中提取数字值?

例如,输入字符串可能是这样的:

String str="abc d 1234567890pqr 54897";

我只想要数字值,例如"1234567890""54897"。所有的字母和特殊字符都将被丢弃。


所有的字母都将被舍弃 - 您的意思是 - codingbiz
我只想要那些数字。 - smya.dsh
我什么都没试过,因为我完全一无所知。数字值可能在输入的开头或结尾。 - smya.dsh
16个回答

1
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);
    }
}

1

您可以按空格拆分字符串以获取各个条目,循环遍历它们,并尝试使用Integer上的相关方法解析它们,使用try/catch方法处理解析数字失败的情况。这可能是最直接的方法。

或者,您可以构造一个正则表达式来匹配仅数字并使用它来找到所有数字。对于大字符串,这可能更具性能。正则表达式将类似于`\b\d+\b'。

更新:或者,如果这不是作业或类似内容(我有点假设您正在寻找实现它自己的线索,但这可能无效),您可以使用@npinti提供的解决方案。那可能是您在生产代码中应采取的方法。


您的建议在示例1234567890pqr中会失败。 - Jonas Eicher
@JonasEicher 我原以为是 1234567890 pqr,而不是 1234567890pqr - Hank Gay

0
 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;
}

例如,如果我传递1.5万或15,0000或15亿,则可以从这些函数中获得数字值。我们可以根据自己的需求自定义字符串。 例如,在1.5 Lac的情况下,结果将为150000。

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);

  }

 }

那将创建一个巨大的数字,而不是保持它们分开。 - Bohemian

0
String str = "abc34bfg 56tyu";

str = str.replaceAll("[^0-9]","");

输出:3456


你只是添加了 parseInt 部分,但这并不会使先前的答案变得不正确。 - Melvin

0
String str = "abc d 1234567890pqr 54897";
str = str.replaceAll("[^\\d ]", "");

执行后的结果将是"1234567890 54897"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接