zoukankan      html  css  js  c++  java
  • java 面试每日一题2

    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    注:如果想单独输出中文的个数和中文符号的个数,只需把isChinese()中的if语句修改

    知识补充:

    java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象。常用的类有BufferedReader,Scanner。

    1、利用 Scanner 实现从键盘读入integer或float 型数据

      Scanner看作是System.in对象的支持者,System.in取得用户输入的内容后,交给Scanner来作一些处理.
      Scanner类中提供了多个方法:
      next():取得一个字符串;
      nextInt():将取得的字符串转换成int类型的整数;
      nextFloat():将取得的字符串转换成float型;
      nextBoolean():将取得的字符串转换成boolean型; 用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一 键时,Scanner就会返回下一个输入. 当你输入的内容中间包括空格时,显然,使用Scanner就不能完整的获得你输入的字符串.

    2、利用 BufferedReader实现从键盘读入字符串并写进文件abc.txt中

      readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符

      使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).

    3. str.getBytes();  如果括号中不写charset,则采用的是Sytem.getProperty("file.encoding"),即当前文件的编码方式, 

                   很多人写的是系统的默认编码,通过代码测试并非如此,实际得到的是文件的编码方式

              str.getBytes("charset");//指定charset,即将底层存储的Unicode码解析为charset编码格式的字节数组方式 

                          String new_str=new String(str.getBytes("utf-8"),"gbk"));

             将已经解析出来的字节数据转化为gbk编码格式的字符串,在内存中即为gbk格式的字节数组转为Unicode去交互传递 ,会出现乱码,反过来就不会了

    4.

      把String转换成bytes,各种编码转换成的bytes不同,比如UTF-8每个汉字转成3bytes,而GBK转成2bytes,所以要说明编码方式,否则用缺省编码。

      都是将一个string类型的字符串转换成byte类型并且存入一个byte数组中。在java中的所有数据底层都是字节,字节数据可以存入到byte数组。  

      存储字符数据时(字符串就是字符数据),会先进行查表,然后将查询的结果写入设备,读取时也是先查表,把查到的内容打印到显示设备上
      getBytes()是使用默认的字符集进行转换,getBytes(“utf-8”)是使用UTF-8编码表进行转换。

    5.在测试过程中,偶尔遇到如下的线程问题

    ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
    JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [http://www.cnblogs.com/../src/share/back/util.c:820]

    解决方法:

    在程序最后,main()函数中添加:

    System.exit(0);

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class testTwo {
        public static void main(String args[]) throws UnsupportedEncodingException{
            int en=0,num=0,space=0,others=0;
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            byte[] bytes=null;
            String a="";
            System.out.println("请输入字符串:");
            try{
                a=br.readLine();
            }catch(IOException e){
                e.printStackTrace();
            }
            bytes=a.getBytes();
            for(int i=0;i<bytes.length;i++){
                char b=(char) bytes[i];
                
                if(b>='a'&&b<='z'||b>='A'&&b<='Z'){
                    en++;
                }else if(b>='0'&&b<='9'){
                    num++;
                }else if(b==' '||b==' '){
                    space++;
                }else if(isChinese(b)){
                    others++;
                }
                //String str = String.valueOf(b);
                String c = new String(bytes,"UTF-8");
                System.out.println(i+c);
            }
            if(others>=3){
                others=others/3;
            }
            System.out.println("en is:"+en);
            System.out.println("num is:"+num);
            System.out.println("space is:"+space);
            System.out.println("others is:"+others);
            System.exit(0);
        }
         // 根据Unicode编码完美的判断中文汉字和符号
        private static boolean isChinese(char c) {
            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
            if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                    || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
                return true;
            }
            return false;
        }
    }
  • 相关阅读:
    数据库事务查看
    在SQL中删除重复记录(多种方法)
    OO设计原则
    NHibernate开源框架Cuyahoga学习之权限映射
    链队列的实现
    二叉树的实现
    NHibernate.cfg.xml文件配置
    HQL查询实例
    对象枚举遍历实现二
    NHibernate开源框架Cuyahoga学习之数据访问泛型约束的实现
  • 原文地址:https://www.cnblogs.com/tjlgdx/p/5879000.html
Copyright © 2011-2022 走看看