簡體   English   中英

java - 如何從包含數字和字母的序列中添加數字?

[英]How to add numbers from a sequence that contains numbers and letters in java?

假設用戶提交這個序列:dadeer50dfder625dsf3,程序應該打印數字總和的結果:50+625+3。 我怎樣才能做到這一點 ?

這是我到目前為止所做的,但它不起作用。 有人能幫助我嗎 :( :

String secuencia = JOptionPane.showInputDialog("Ingresa tu secuencia");
           int par = secuencia.length();
                     int sumatoria = 0;
         int sumatoria1 = 0;
                          for (int i = 0; i < par; i++) {
            String p = secuencia.substring(i, i +1); 
                        if(p.equals("1") || p.equals("2") || p.equals("3") || p.equals("4") || p.equals("5") || p.equals("6") || p.equals("7") || p.equals("8") || p.equals("9") || p.equals("0")){
                                for (int j = i + 1; j < par; j++) {
                                String n = secuencia.substring(j, j + 1);
                                 if(n.equals("1") || n.equals("2") || n.equals("3") || n.equals("4") || n.equals("5") || n.equals("6") || n.equals("7") || n.equals("8") || n.equals("9") || n.equals("0")){

                                     int v = Integer.parseInt(p);
                                     int y = Integer.parseInt(n);
                          sumatoria += v;       
                                     sumatoria1 += y ;

                        }      }}           

                        System.out.print(sumatoria);
                        System.out.println(sumatoria1);

你可以String.split(String) ,它需要一個正則表達式。 我認為你想要非數字,所以你可以使用\\\\D+ 就像是,

String str = "dadeer50dfder625dsf3";
String[] arr = str.split("\\D+");
int total = 0;
StringBuilder sb = new StringBuilder();
for (String val : arr) {
    if (val.isEmpty()) {
        continue;
    }
    sb.append(val).append(" + ");
    total += Integer.parseInt(val);
}
sb.replace(sb.length() - 2, sb.length(), "= ");
System.out.print(sb);
System.out.println(total);

輸出是

50 + 625 + 3 = 678

羅伯托,

看起來您走在正確的道路上,但是您的代碼的問題在於它假定數字只有一個字符長。 我認為它添加了 5+0+6+2+5+3 而不是所需的添加。

我建議使用函數 String.split() 將包含數字的部分和不包含數字的部分分開。 我相信你可以傳遞像 [A-Za-z] 這樣的東西,它會返回只包含數字的字符串(假設只使用字母而不使用其他字符)。 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

這是一個簡單的代碼,沒有像您在評論中告訴我們的那樣使用 RegEx:

public static void main(String[] args) {
    String str = "55blhalhalh3265hezubf565";
    boolean isLetter = false;
    String temp = "";
    int sum = 0;

    for (int i = 0 ; i < str.length() ; i++){
        switch(str.charAt(i)){
        case '0': 
        case '1': 
        case '2': 
        case '3': 
        case '4': 
        case '5': 
        case '6': 
        case '7': 
        case '8': 
        case '9':
            isLetter = false;
            temp += str.charAt(i);
            break;
        default :
            if (!isLetter)sum += Integer.parseInt(temp);
            isLetter = true;
            temp = "";
            break;
        }
    }
    if (!isLetter) sum += Integer.parseInt(temp);

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

我故意讓開關長得很清楚。

一點解釋:

for會遍歷String對象的所有字符。 然后, switch檢查它是否是一個數字:

  • 如果是這樣,布爾值 isLetter 取假值,如果有,我們將字符連接到前一個數字

  • 如果它是一個字母,我們將已經找到的數字添加到總和中。

這里有兩個版本。
第一個顯示使用正則表達式是多么容易。
第二個使用注釋中給出的約束。 由於它說“子字符串”,我假設使用Integer.parseInt()

// Using regular expression
String text = "dadeer50dfder625dsf3";
int sum = 0;
for (Matcher m = Pattern.compile("\\d+").matcher(text); m.find(); )
    sum += Integer.parseInt(m.group());
System.out.println(sum);

// Using only substring, for loops and length
String text = "dadeer50dfder625dsf3";
int sum = 0, numStart = -1;
for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);
    if (c >= '0' && c <= '9') {
        if (numStart == -1)
            numStart = i;
    } else {
        if (numStart != -1)
            sum += Integer.parseInt(text.substring(numStart, i));
        numStart = -1;
    }
}
if (numStart != -1)
    sum += Integer.parseInt(text.substring(numStart));
System.out.println(sum);

兩者的輸出

678
String str = "dadeer50dfder625dsf3";
    List<String> list = Arrays.asList(str.split("\\D+"));
    int sum = 0;
    for (String each : list) {
        try {
            sum += Integer.parseInt(each);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    System.out.println(sum);

暫無
暫無

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

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