黑马程序员技术交流社区
标题:
论坛上的一个点招题实现
[打印本页]
作者:
小菜白白白
时间:
2016-9-8 20:10
标题:
论坛上的一个点招题实现
本帖最后由 小菜白白白 于 2016-9-8 20:11 编辑
题目:
从控制台接收一串字符串,完成以下要求 (共10分)
a,求出该字符串的长度并输出到控制台,如字符串长度为:X
b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
c,统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如 a=3,b=4,c=4,d=3,e=2,f=1
d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*')
代码实现:
import java.util.Scanner;
import java.util.TreeMap;
public class StringZonghe {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.nextLine();
System.out.println("该字符串的长度为:" + s.length()); // a要求;求出该字符串的长度
char[] astr = s.toCharArray();
bMethod(astr);
cMethod(astr);
dMethod(astr);
eMehtod(astr);
}
public static void bMethod(char[] str) { // b要求:将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
if (str[0] != str[str.length - 1]) { // 判断字符数组第一个字符和最后一个字符是否相等,不相等则交换
char temp = str[0];
str[0] = str[str.length - 1];
str[str.length - 1] = temp;
System.out.println("已经交换了第一个字符和最后一个字符");
} else {
System.out.println("第一个和最后一个字符是一样的");
}
}
private static void cMethod(char[] astr) { // c 要求:统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如 a=3,b=4,c=4,d=3,e=2,f=1
TreeMap<Character, Integer> tm = new TreeMap<>(); // 用TreeMap集合来存放字符串中各个字符(key)和其个数(value)
for (char c : astr) {
if (tm.containsKey(c)) { // 判断Map集和中是否有该字符,有value+1,没有则存入该字符,value为1
tm.put(c, tm.get(c) + 1);
} else {
tm.put(c, 1);
}
}
for (Character ch : tm.keySet()) { // 遍历map集合打印字母个数
// a=3,b=4,c=4,d=3,e=2,f=1
System.out.println(ch + "=" + tm.get(ch));
}
System.out.println();
}
private static void dMethod(char[] astr) { // d要求:将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
for (int i = 1; i < astr.length; i = i + 2) { // 直接for循环奇数下标值为*
astr
= '*';
}
System.out.println("奇数换为*后输出");
for (char c : astr) {
System.out.print(c);
}
System.out.println();
}
private static void eMehtod(char[] astr) { //e要求:将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出(注意:两边都包含'*')
String s1 = String.valueOf(astr);
//System.out.println(s1);
System.out.println("第一个'*'到第三个'*'之间的数据为:");
int startIndex = s1.indexOf('*'); //获得第一个*的下标
if (s1.length() > 6) {
int endIndex = s1.indexOf('*', 4) + 1; //获得第三个*下标
System.out.println(s1.substring(startIndex, endIndex)); //截取字符串
}
}
}
总结:感觉要求点全部实现花费时间稍微长了点,半个小时差不多
作者:
冷冷冷白
时间:
2016-9-8 20:41
受教了,感觉自己会写不出来
作者:
xiguapi
时间:
2016-9-8 21:01
继续加油~~
作者:
细听风语为梧桐
时间:
2016-9-8 21:06
赞一个。。。。。
作者:
taozhihui
时间:
2016-9-8 21:52
多多分享
作者:
xianghui0521
时间:
2016-9-9 00:18
目前只能做出前三个 .. 后面的就不会了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2