題目:將字符串 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鍵之前的所有字符,它是可以得到帶空格的字符串的。