2015-09-04 39 views
1

我遇到了正確打印此字符串的問題。 「34 + 23 * 15 + -10 // ** =?=」。 它存儲在一個名爲String input的變量中; 我想將每個不同的變量類型分隔成不同的標記。 因此,例如,如果我找到整數我分組他們,如果我找到符號,我分組他們。從一串不同的字符中返回整數

我做了一個2位數的整數檢查。但我在檢查XX,XXX,XXXX整數時遇到問題。不同位數的整數,不只是兩位數

if(Character.isDigit(input.charAt(i)) && Characted.isDigit(input.charAt(i+1)){ //checking for integers 
    count++; 
    temp = input.substring(input.charAt(i), input.charAt(i+1)); 
    count = Integer.parseInt(temp); 

    continue; 
} 
+0

如果你總是有自然數,然後讀取每個數字並將其添加到字符串中,直到找到非數字字符('+'或''等)。一個整數,如果發生這種情況,它不是很漂亮的代碼,但它可以幫助你解決你的任務。 – Tom

回答

2

您應該看看regular expressions。這是如何提取號碼的開出一個字符串的示例:

 List<Integer> numbers = new ArrayList<Integer>(); 
     Pattern pattern = Pattern.compile("-?\\d+"); 
     Matcher matcher = pattern.matcher(str); 
     while (matcher.find()) { 
     numbers.add(Integer.valueOf(matcher.group())); 

這甚至適用於負數,如果我沒有記錯的十進制數。

0

你問如何編寫for循環?

int j; // Declaration outside for, so the variable persists 
for(j = i; Character.isDigit(input.charAt(j)); ++j); // Semicolon to do nothing in the loop, besides increasing j. 
if(j > i) 
{ 
    count = Integer.parseInt(input.substring(i, j)); 
    continue; 
} 

我離開了count++因爲你反正覆蓋它,不知道你打算在那裏做。

0

您在這裏有幾個選項。你可以修改你正在使用的方法。如果你保存的數量到目前爲止,並做:

String numberSofar = ""; 
for(char c : inputString){ 
    if(Character.isDigit(c) 
     numberSoFar+=c; 
    else{ 
     digits+= Integer.parseInt(c); 
    } 
} 

這樣的事情會起作用,但它有幾個退步。這是非常動態的,它很慢(這可能不會影響,除非你有數百萬的數字,但仍然...)。

另一種選擇是使用正則表達式。

int sum = 0; 
    Pattern pattern = Pattern.compile("\\d+"); 
    Matcher matcher = pattern.matcher(str); 
    while (matcher.find()) { 
    sum += Integer.parseInt(matcher.group())); 

但是,如果你真的想要得到的東西,是不是數字就有點更復雜(或者你可以做兩個循環,只是找的你看什麼,第一次相反。 ^將允許你這樣做。