在Java中从字符串中提取Ints

时间:2016-06-05 19:21:08

标签: java string int

我试图编写一个接受String的方法,在其中查找Ints 然后将它们加在一起。

例如:

    String s = "five5six66"

应该返回5 + 66 = 71或:

    String s = "1ciao2three3"

应返回1 + 2 + 3 = 6

以下是我已经写过的内容,但是当我运行它时,我得到了一个

    NumberFormatException

代码(更新1):

    public static int addNumbers(String s) {
    String numbers="";
    int addNumbers = 0;
    int i;
    char c;

    for (i=0; i<s.length(); i++) {
        if (s.charAt(i)>='0' && s.charAt(i)<='9') {
            c = s.charAt(i);
            while (i<s.length()-1) {
                if (s.charAt(i+1)>='0' && s.charAt(i+1)<='9')
                    numbers = numbers.valueOf(c + s.charAt(i+1));
                addNumbers = addNumbers + Integer.parseInt(numbers);
            }
            addNumbers = addNumbers + Character.getNumericValue(c);
        }
    }
    return addNumbers;
}

希望你能帮我修复这段代码,请让我理解我做错了什么!

我也可以扩展它,所以如果我有一个像:

这样的字符串
    String s = "hi123and27"

我可以得到123 + 27 = 150?

因为我的代码现在只限于2位数字。

4 个答案:

答案 0 :(得分:4)

我建议使用REGEX来满足您的要求:

你需要:

  1. REGEX模式:&#34; \ d +&#34;
  2. 一个累加器,用于连接给定String的值
  3. 实施例

    public static void main(String[] args) {
        String s = "hi123and27";
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(s);
        int accumulator  = 0;
        while (m.find()) {
            accumulator  += Integer.parseInt(m.group());
        }
        System.out.println("final result: " + accumulator );
    }
    

答案 1 :(得分:2)

Regex + Java 8流:

public static int addNumbers(String str) {
    return Arrays.stream(str.replaceAll("[^0-9]", " ").split(" "))
            .filter(s -> !s.isEmpty())
            .mapToInt(Integer::parseInt)
            .sum();
}

有关建议的EDIT是评论:

public static int addNumbers(String str) {
    return Arrays.stream(str.split("[^0-9]+"))
            .filter(s -> !s.isEmpty())
            .mapToInt(Integer::parseInt)
            .sum();
}

答案 2 :(得分:0)

试试这个

public static void main(String [] args){

    String string = "hi123and27";

    int size = string.length();

    int sum = 0;
    StringBuilder val = new StringBuilder();

    for (int idx = 0; idx < size; idx++) {
        Character character = string.charAt(idx);

        if (Character.isDigit(character)) {
            val.append(character);

            //if last character is a digit
            if((idx+1 == size) && val.length() > 0)
                sum += Integer.parseInt(val.toString());

        }else{
            if(val.length() > 0)
                sum += Integer.parseInt(val.toString());

            //reset the val for digits between characters for it to store the next sequence
            val.setLength(0);
        }
    }

    System.out.println("The sum is : " + sum);
}

答案 3 :(得分:-1)

你应该试试这个。

public static int addNum(String text){
    String numbers = "";
    int finalResult = 0;

    for(int i=0;i < text.length();i++){

        if(isNumeric(text.substring(i, i + 1)))
        {
            numbers += text.substring(i, i + 1);

            if(i==text.length()-1) {
                finalResult += Integer.parseInt(numbers); 
            }
        }else {
            if(!numbers.equals("")){
                finalResult += Integer.parseInt(numbers);
                numbers = "";
            }
        }
    }
    return finalResult;
}

public static boolean isNumeric(String str)  
{  
  try{  
    int d = Integer.parseInt(str);  
  }  
  catch(NumberFormatException ex){  
    return false;  
  }
  return true;  
}