通过键盘输入一串小写字母(a-z)组成的字符串。请编写一个字符串压缩程序。 将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。
1.仅压缩连续重复出现的字符。比如字符串“abcbc”,由于无连续重复字符,压缩后的字符串还是“abcbc”。
2.压缩字段的格式为:字符重复的次数+字符。例如:字符串:"xxxyyyyyyz"压缩后就成为"3x6yz"。
public static void main(String[]args){ Scanner scanner = new Scanner(System.in); String str = ""; System.out.println("请输入一串字符:"); str = scanner.nextLine(); String result = compressLetters(str); System.out.println("压缩前的字符串:"+str); System.out.println("压缩后的字符串:"+result); }
public static String compressLetters(String letters){ String resultStr = ""; if (!StringUtil.isBlank(letters)){ char[] strArry = letters.toCharArray(); int index = 0; String mb = String.valueOf(strArry[0]); for (char c:strArry){ if (mb.equals(String.valueOf(c))){ index ++; }else { if (index == 1){ resultStr += mb; }else { resultStr += index + mb; } mb = String.valueOf(c); index = 1; } } if (index == 1){ resultStr += mb; }else { resultStr += index + mb; } } return resultStr; }
但是这样还不完美,因为有可能输入的是大写字母。所以加了判断大小写字母的方法:
/** * 通过键盘输入一窜小写字母(a-z)组成的字符串。请编写一个字符串压缩程序。 * 将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。 * Created by chenying on 2018/11/26. */ public class SuanFa8 { public static void main(String[]args){ Scanner scanner = new Scanner(System.in); String str = ""; System.out.println("请输入一串字符:"); str = scanner.nextLine(); String result = compressLetters(str); System.out.println("压缩前的字符串:"+str); System.out.println("压缩后的字符串:"+result); } public static String compressLetters(String letters){ String resultStr = ""; if (!StringUtil.isBlank(letters)){ char[] strArry = letters.toCharArray(); int index = 0; if (isUpperCase(strArry[0])){ System.out.println("请输入小写字母!"); return null; } String mb = String.valueOf(strArry[0]); for (char c:strArry){ if (mb.equals(String.valueOf(c))){ index ++; }else { if (index == 1){ resultStr += mb; }else { resultStr += index + mb; } if (Character.isUpperCase(c)){ System.out.println("请输入小写字母!"); return null; } mb = String.valueOf(c); index = 1; } } if (index == 1){ resultStr += mb; }else { resultStr += index + mb; } } return resultStr; } public static boolean isUpperCase(char c) { return c >= 65 && c <= 90; } public static boolean isLowerCase(char c) { return c >= 97 && c <= 122; } }