java筆試題:用java實現字符串壓縮算法

題目:將字符串 aaabcdda (可以從控制檯接收)編程實現將其轉換爲 3a1b1c2d1a。


我的大致就這樣:

System.out.print("請輸入一串字符串:");
Scanner s = new Scanner(System.in);
String str = s.nextLine();
StringBuffer result = new StringBuffer();
// 字符串長度
int count = str.length();
// 取第一個字符
char word1 = str.charAt(0);
// 連續字符的個數
int sum = 1;
for (int i = 1; i < count; i++) {
	// 循環取字符
	char word2 = str.charAt(i);
	// 把前一個字符和當前字符比較
	if (word1 == word2) {
		// 相同的字符 個數加1
		sum++;
		continue;
	}
	// 拼接字符
	result.append(sum).append(word1);
	// 當前字符變爲前一個字符
	word1 = word2;
	// 個數清零
	sum = 1;
}
// 加上最後一個字符及個數,並打印輸出
System.out.println("字符串壓縮後:" + result.append(sum).append(word1));

效果如下:


再輸入帶空格的字符串:


假如從控制檯接收輸入的字符串時,我們調用的是next方法,

Scanner s = new Scanner(System.in);
String str = s.next();
這時效果會變成:




這裏提下next和nextLine的區別:

next():  當方法遇見第一個字符爲有效字符(非空格、換行字符)時,開始掃描,當遇見第一個分割符或結束符(空格或換行符)時結束掃描。

反之第一個字符非有效字符,next()方法會自動將其之後的字符去掉。

簡單地說,next()方法返回的是來自此掃描器的下一個完整標記,完整標記的前後是與分隔模式匹配的輸入信息,所以next方法不能得到帶空格的字符串。


nextLine():方法的結束符是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字符,它是可以得到帶空格的字符串的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章