2016-10-01 66 views
1

我想寫一個快速程序來計算輸入字符串中的空格數。這是我到目前爲止有:顯示輸入字符串中的空格數量?

import java.util.Scanner; 

public class BlankCharacters 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello, type a sentence. I will then count the number of times you use the SPACE bar."); 

     String s; 
     int i = 0; 
     int SpaceCount = 0; 

     Scanner keyboard = new Scanner(System.in); 
     s = keyboard.nextLine(); 

     while (i != -1) 
     { 
      i = s.indexOf(" "); 
      s = s.replace(" ", "Z"); 
      SpaceCount++; 
     } 

     System.out.println("There are " + SpaceCount + " spaces in your sentence.");  
    } 
} 

while循環首先使用s.indexOf(」「)來查找字符串s的第一個白色的空間,與焦ž替換它,然後加1的值SPACECOUNT。這個過程重複,直到s.indexOf沒有找到一個空格,導致我爲-1,因此停止循環。

換句話說,每找到一個空白處,SpaceCount就會增加1,然後向用戶顯示空白總數。或者,它應該是...

問題:SPACECOUNT不增加,反而總是打印出2

如果我輸入「一二三四五」,並打印出一個String,我會得到「oneZtwoZthreeZfourZfive」,表示有四個空格(while循環運行四次)。儘管如此,SpaceCount仍然爲2.

程序運行良好,但它始終顯示SpaceCount爲2,即使字符串/句子超過十個或二十個字。即使在使用do/for循環時,我也會得到相同的結果。我一直堅持這一段時間,我不確定爲什麼SpaceCount在while循環的其餘部分繼續執行(按預期)時停留在2。

任何幫助非常感謝!

+1

如果你的字符串沒有尾隨空格,我的意思是前後字符串,那麼你也可以使用'StringTokenizer tokenizer = new StringTokenizer(str,「」); (「總空間數是:」+(tokenizer.countTokens() - 1));'*用簡單的話說,如果你在計算空白之前修整字符串* – emotionlessbananas

+0

我會嘗試其他人提到的方法。我只是很好奇爲什麼SpaceCount不會改變。謝謝。 –

回答

3

我只是爲什麼SPACECOUNT不會改變

在循環的第一次迭代真的很好奇,你什麼也沒有(所有的空格)代替" ",並增加SpaceCount。在第二次迭代中,您什麼都沒有發現(變得-1)並且什麼都不替換,然後增加SpaceCount(變得2)。

而不是修改String,我會迭代String中的字符並計算空格。

System.out.println("Hello, type a sentence. I will then count the " 
    + "number of times you use the SPACE bar."); 
Scanner keyboard = new Scanner(System.in); 
String s = keyboard.nextLine(); 
int spaceCount = 0; 
for (char ch : s.toCharArray()) { 
    if (ch == ' ') { 
     spaceCount++; 
    } 
} 
System.out.println("There are " + spaceCount + " spaces in your sentence."); 

另外,按照慣例,變量名應該以小寫字母開頭。而且,通過在聲明變量時初始化變量,可以使代碼更加簡潔。

+0

會試試看,謝謝!對Java仍然陌生。 –

1

使用此,只是簡單而直接。將空格字符替換爲none,並將其與實際的字符串長度相減。這應該給字符串中的空格的數量

Scanner n = new Scanner(System.in); 
n.useDelimiter("\\n"); 
String s = n.next(); 
int spaceCount = s.length() - s.replaceAll(" ", "").length(); 
System.out.println(spaceCount); 
+0

不知道s.replaceAll是一件事,謝謝! Java仍然很新。 –

+0

是@RyanA。運行它並檢查出來。工作正常。 –

+1

這是一個相當昂貴的方式來做到這一點。它使用正則表達式和和'StringBuffer'這是一個同步類。 – Gray

2

你要計算空白的很長一段路。替換的代碼塊:

while (i != -1) 
    { 
     i = s.indexOf(" "); 
     s = s.replace(" ", "Z"); 
     SpaceCount++; 
    } 

有了這個:

char[] chars = s.toCharArray(); 
for(char c : chars){ 
    if(c == ' '){ 
     spaceCount++; 
    } 
} 

這是更優雅一點,(我相信)更便宜的執行了。希望這對你有用!

+0

@格雷這是一個巧合。我不知道在這種情況下應該怎麼做......我應該刪除答案還是什麼? –

+0

Nah。沒關係。有時我覺得人們只是複製別人的答案。你可以充實一點,如果你願意,可以添加更多細節。 – Gray

+1

'if(char ==''){'should be'if(c ==''){','char'是一個數據類型。 –

相關問題