2017-05-14 14 views
-1

input =「12 text 1 abc12 c12lj 7 3」;用於查找輸入字符串中存在的整數之和的程序

輸出= 12 + 1 + 7 + 3 = 23

:在輸入串中的整數被由一個或多個空格分隔。不要考慮字母數字字符串。我曾遇到過solution。但我不想讓我的代碼拋出NumberFormatException。

到目前爲止,我已經嘗試下面的代碼和它的工作細如預期所有的情況下,不拋出任何NumberFormatException的

public class SumOfIntegersFromString { 

private static final String NUMBER = ""; 

/** It matches one or many white spaces. **/ 
private static final String REG_EXPR_MATCH_ONE_OR_MORE_SPACES = "\\s+"; 

// Logic 1 
private static int sumOfIntegersFromString(final String input) { 
    int count = 0; 
    String splits[] = input.split(REG_EXPR_MATCH_ONE_OR_MORE_SPACES); 
    for (String s : splits) { 
     if (isNumber(s.trim())) { 
      Integer no = new Integer(s); 
      count = count + no; 
     } 
    } 
    return count; 
} 

private static boolean isNumber(String str) { 
    boolean isNumber = Boolean.FALSE; 
    int count = 0; 
    for (int i = 0; i < str.length(); i++) { 
     String s = Character.toString(str.charAt(i)); 
     if (NUMBER.contains(s)) { 
      count = count + 1; 
     } 
    } 
    if (count == str.length()) { 
     isNumber = Boolean.TRUE; 
    } 
    return isNumber; 
} 

public static void main(String[] args) { 
    String text = "12 Test 3 7 text123 1 2 "; 
    System.out.println(sumOfIntegersFromString(text)); 
}} 

在上面的代碼或新的邏輯,任何優化這將是更優化的歡迎

+0

你完全讀完這個問題了嗎?我是說有類似的問題已經在這裏提到[http://stackoverflow.com/questions/22551574/java-program-to-return-the-sum-of-all-integers-found-in-the-parameter-字符串]引發的異動 – StEcHy

+0

那麼你的問題是什麼? – Steve

+0

我寫的代碼沒有問題。我想爲它優化的解決方案 – StEcHy

回答

0

您可以通過正則表達式匹配簡化您的isNumber方法:

private static final String REG_EXP_NUMBER = "\\d+"; 

private static boolean isNumber(String str) { 
    return str.matches(REG_EXP_NUMBER); 
} 
0

我寧願Pattern正則表達式來檢測由字邊界包圍的數字。然後你可以解析你找到的數字並將它們添加到List<Integer>。假設您使用的是Java 8+,您可以將這些值映射到String並通過Collectors.joining(" + ")收集以生成所需的輸出(並通過映射到int獲取實際總和)。像,

String text = "12 text 1 abc12 c12lj 7 3 "; 
List<Integer> al = new ArrayList<>(); 
Pattern p = Pattern.compile("\\b(\\d+)\\b"); 
Matcher m = p.matcher(text); 
while (m.find()) { 
    al.add(Integer.parseInt(m.group())); 
} 
System.out.print(al.stream().map(x -> Integer.toString(x)) // 
     .collect(Collectors.joining(" + "))); 
System.out.print(" = "); 
System.out.println(al.stream().mapToInt(Integer::intValue).sum()); 

輸出(如需要)

12 + 1 + 7 + 3 = 23 
0

如果你輸入一個字符串,所有的字都用空格分隔,你可以創建一個掃描對象,將令牌化的白色字符之間的每個序列空間。然後你可以解析一個整數的字符串。如果它不是一個整數,try/catch子句將不會執行任何操作。

import java.util.*; 

public class AddNums { 
public static void main(String[] args) { 
    String str = "hello 10 $xyz good 20 30 df"; 
    Scanner sequence = new Scanner(str);    
    int sum = 0; 
    while (sequence.hasNext()){ 
    String s = sequence.next(); 
    try { 
     sum += Integer.parseInt(s); 
    } 
    catch (NumberFormatException e) {} 
    }  
    System.out.println(sum); 
} 
} 
+0

請在發佈您的答案前先閱讀問題開始到結束 – StEcHy

相關問題