簡體   English   中英

從Java中的字符串中提取整數

[英]Extracting Ints from Strings in Java

我正在嘗試編寫一個接受字符串的方法,在其中查找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位數字。

我建議使用REGEX來滿足您的要求:

你會需要:

  1. REGEX模式: “ \\ d +”
  2. 一個累加器,該累加器將給定String的值串聯起來

例:

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

正則表達式+ Java 8流:

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

有關建議的編輯為評論:

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

嘗試這個

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

您應該嘗試這個。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM