2017-10-06 99 views
0

對於我的學校,我必須創建一個可以添加2個數字的add函數。從字符串中提取數字並添加它們

例子:/add 6 4
解決方案:10

這是我的代碼的那一刻,這讓我做到這一點,但只有在最大/add 9 9

String stString = message_text; 
String number = stString.replaceAll("[^0-9]", ""); 
int numArr[] = new int[2]; 
for (int i = 0; i<2; i++) { 
    numArr[i] = Integer.parseInt(String.valueOf(number.charAt(i))); 
} 

int sum = IntStream.of(numArr).sum(); 

我需要一種方法是能夠使我可以使用/add 14 23左右。

+2

歡迎來到Stack Overflow。你想['String#split()'](http://download.java.net/java/jdk9/docs/api/java/lang/String.html#split-java.lang.String-)你原來的串。 – AJNeufeld

回答

2

你爲什麼不使用裂像這樣:

String[] myValues = stString.split(" "); 

而在這之後由myValues獲取值[1]和myValues [2]

0

您的問題是,你是太複雜它很多與replace(),String.valueOf()IntStream.of(numArr).sum(),然後你限制你的程序只能讀取一個字符,所以你的號碼總是隻有一個數字。

解決方案:

你只需要使用.split()方法,並傳遞給它的空間分隔符:

String stString = "/add 64 10"; 
int a = Integer.parseInt(stString.split(" ")[1]); 
int b = Integer.parseInt(stString.split(" ")[2]); 
System.out.println(a+b); //will print 74 
0

與方法的問題是,你混淆了所需數量的指數在String與他們的實際指數在String。 基本上你想要兩個數字,但你總是在替換後尋找兩個連續的數字。

解決此問題的一種方法是使用簡單的正則表達式來獲取1+數字序列並收集它們。

例如:

String[] test = { 
     "/add 1 2", 
     "/add 22 20" 
    }; 
Pattern digits = Pattern.compile("\\d+"); 
for (String s: test) { 
    // parsing after /add 
    String sequence = s.substring(4); 
    // matching digits 
    Matcher m = digits.matcher(sequence); 
    // finding as many numbers as possible - you can always hard-limit to 2 if needed 
    long sum = 0; 
    while (m.find()) { 
     // no need to check parsing, it will always be integer figures at this point 
     sum += Integer.parseInt(m.group()); 
    } 
    System.out.println(sum); 
} 

輸出

3 
42 
1

不能寫你的功課你,但看看你的邏輯。如果你只讀一個字符,你只能有一個數字。

解析多數字輸入而不是使用charAt()。多加幾行代碼來收集和構建您的輸入。嘗試String.substring()String.split()並從那裏開始工作。

1

既然你已經在使用流,你可以做一個1班輪流的唯一的解決辦法:

int sum = Stream.of(stString.split(" ")). 
    skip(1). 
    mapToInt(Integer::parseInt). 
    sum(); 
0

您可以使用分割字符串代替,然後將片段轉換成數字:

String stString = "/add 14 56"; 
    String[] fragments = stString.split(" "); 
    int sum = 0; 
    // Start from fragment 1 assuming that fragment 0 is "/add" 
    for (int i = 1; i < fragments.length; i++) 
     try { 
      sum += Integer.valueOf(fragments[i]); 
     } catch (Exception e) { 
      System.err.println("Something went wrong converting the strings into integers."); 
      System.err.println("Please check the input string."); 
      System.err.println("\n"); 
      e.printStackTrace(); 
      break; 
     } 
相關問題