黑马程序员技术交流社区

标题: 一道面试题 [打印本页]

作者: wyq0627java11    时间: 2016-8-17 21:56
标题: 一道面试题
键盘录入一个字符串,将字符串进行大小写转换(小写字母转换成大写,大写字母转换成小写),判断转换后的字符串中各大小写字符出现的次数,在平台打印。

作者: li--yong    时间: 2016-8-17 22:12
判断转换后的字符串中各大小写字符出现的次数,这句话不怎么理解诶,老是把题理解错
作者: talons    时间: 2016-8-17 22:27
主要考String 类的一些常用方法。不懂的地方可以去看API文档。
[Java] 纯文本查看 复制代码
package demos;

import java.util.Scanner;

/*
需求:键盘录入一个字符串,将字符串进行大小写转换(小写字母转换成大写,大写字母转换成小写),判断转换后的字符串中各大小写字符出现的次数,在平台打印。
*/
public class Demo2{
        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                System.out.println("请输入字符串:");
                String str = in.next();               
                System.out.println(exChange(str));               
        }
       
        public static String exChange(String str){
                StringBuffer sb = new StringBuffer();
                int Lowercount = 0,Uppercount = 0;
                if(str!=null){
                        for(int i=0;i<str.length();i++){
                                char c = str.charAt(i);
                                if(Character.isUpperCase(c)){
                                        sb.append(Character.toLowerCase(c));
                                        Uppercount++;
                                }else if(Character.isLowerCase(c)){
                                        sb.append(Character.toUpperCase(c));
                                        Lowercount++;
                                }else{
                                        sb.append(c);
                                }
                        }
                }
                return "原字符串中大写字母:"+Uppercount+"个,小写字母:"+Lowercount+"个,转换后字符串:"+sb.toString();
        }       
       
}

作者: zhangliuwei    时间: 2016-8-17 23:04
解题的关键是:Charcter类的方法,包括toLowerCase(char c)、toUpperCase(char c)
以及String类的方法toCharArray()。
首先你先用toCharArray()方法转为字符数组,然后比照ascall码表,判断各个字符是在65-90范围内的大写字母,
还是在97-122内的小写字母,然后转大小写。
对于转换后的字符串中各大小写字符出现的次数问题?
它指的是,转换后的字符中大写字符有哪些。小写字符有哪些。

代码实现已附上,主要是你的问题部分,你可以在其基础上优化!!!望采纳。
[Java] 纯文本查看 复制代码
package com.zlw;

import java.util.Scanner;

public class Demo {
        public static void main(String[] args) {
                Demo demo=new Demo();
                demo.convert();
        }

        public void convert(){
                Scanner scanner=new Scanner(System.in);
                System.out.println("请输入纯英文字符串...");
                String info = scanner.nextLine();
               
                //读入的字符串转为字符数组
                char[] charArray = info.toCharArray();
               
                int countOfUp=0;
                int countOfLow=0;
                for(char c:charArray){
                        if(c>=65 && c<=90){
                                //大写转小写
                                Character.toLowerCase(c);
                                countOfUp++;//此处记录的是转换前的大写字母,,,所以是转换后的小写字母
                        }else if(c>=97 && c<=122){
                                //小写转大写
                                Character.toUpperCase(c);
                                countOfLow++;//此处记录的是转换前的小写字母,,,所以是转换后的大写字母
                                System.out.println(countOfLow);
                        }else{
                                System.out.println("您输入的字符不是纯英文。");
                        }
                }
               
                System.out.println("转换后大写字母的个数是:"+countOfLow);
                System.out.println("转换后小写字母的个数是:"+countOfUp);
        }
}
急需技术分,谢谢。
作者: DadouBK    时间: 2016-8-17 23:23
就大小写转换问题给出另外一种思路,下面附上代码,注:没有写大小写字母统计

[Java] 纯文本查看 复制代码
import java.util.Scanner;
public class k1 {
        public static void main(String[] args) {
                String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
                Scanner sc = new Scanner(System.in);
                String outS = "";
                System.out.println("请输入待转换的字符串:");
                String inS = sc.next();
                for (int i = 0; i < inS.length(); i++) {
                        outS = outS + s.charAt((s.indexOf(inS.charAt(i)) + 26));
                }
                System.out.println("转换后的字符串:");
                System.out.println(outS);
        }
}


作者: 1344667911    时间: 2016-8-17 23:42
输入后转为字符串,然后进行大小写换算,再进行次数统计
作者: wq1194165366    时间: 2016-8-18 00:50
[Java] 纯文本查看 复制代码
package com.string;

import java.util.Scanner;

public class Demo_GetCount {


        /**
         * 键盘录入一个字符串,将字符串进行大小写转换(小写字母转换成大写,大写字母转换成小写),
         * 判断转换后的字符串中各大小写字符出现的次数,在平台打印。
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一段字符串:");
                String Line = sc.nextLine();
                System.out.println(getCount(Line));
               
        }
        public static String getCount(String line){
                int LowerCount=0;//定义一个记录小写的计数器
                int UpperCount=0;//定义一个记录大写的计数器
                if(line!=null){          //先判断一下输入的字符串是否为空
                        for(int i =0 ;i<line.length();i++){
                                char c = line.charAt(i);
                                if(c>=65&&c<=90){
                                        Character.toLowerCase(c);
                                        UpperCount++;
                                        //System.out.println(UpperCount);
                                       
                                }else if(c>=97&&c<=132){
                                        Character.toUpperCase(c);                                        //通过包装类调用其方法来转换字符的大写功能
                                        LowerCount++;
                                        //System.out.println(LowerCount);
                                }else
                                        System.out.println("你输入的字符串不符合规则");
                        }
                }
              else
                         return "";
               
                return "转换之后的大写字符出现的数为"+UpperCount+",小写字符出现的次数为"+LowerCount;
        }

}

作者: wyq0627java11    时间: 2016-8-18 13:50
import java.util.Scanner;
import java.util.TreeMap;

public class Test3 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                String a = sc.nextLine();
                char[] arr = a.toCharArray();
                for (int i=0; i<arr.length ; i++) {
                        char c=arr[i];
                        if(c>='a' & c<='z'){
                        c-=32;
                        } else if(c>='A' & c<='Z' ) {
                        c+=32;       
                        }
                        arr[i]=c;
                }
               
                TreeMap<Character, Integer> tr = new TreeMap<>();
                for (int i = 0; i < arr.length; i++) {
                        if (!tr.containsKey(arr[i])) {
                                tr.put(arr[i], 1);
                        } else {
                                tr.put(arr[i], tr.get(arr[i]) + 1);
                        }
                }
                for (char c : tr.keySet()) {
                        int value = tr.get(c);
                        System.out.print(c + "(" + value + ") ");

                }
        }
}

面试老师给的思路,自己写的。
作者: li--yong    时间: 2016-8-18 17:49
treemap老师说以后不怎么用, 就没讲
作者: 695212308    时间: 2016-8-18 18:31

作者: wyq0627java11    时间: 2016-8-18 18:49
用TreeMap 主要是用他的有序性




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2