`
davidx
  • 浏览: 83099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

判断中文字符(最近一道面试题,答案)

阅读更多

一、http://hilliate.blog.hexun.com/11600190_d.html

 

String.getBytes().length != String.length()

String.getBytes().length取的是字节数,因为中文是全角字符,所以每个中文的字节数都为2

String.length()取的是字符长度,按中文的个数来截取。

但是这样有bug  因为中文是全角字符没错,但是并非全角字符就全部是中文

另外的解决方法如下:

  String   str   =   "中国chinese";  
  for(int   i   =0   ;i   <   str.length()   ;   i   ++)  
  {  
  System.out.println(str.substring(i,   i+1).matches("[\\u4e00-\\u9fa5]+"));  
  }  

这是取的中文在Unicode中的编码区间,而且将字符中的每一个substring都拿出来与字符区间相比

最终很容易判断出字符中是否有中文。

 

二、http://blog.csdn.net/zhengjianqi/archive/2008/07/04/2612385.aspx

package test;  
 
 
 
import java.util.Random;  
 
 
 
public class IsChineseOrEnglish {  
 
    //  GENERAL_PUNCTUATION 判断中文的“号  
 
    //  CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号  
 
    //  HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号  
 
    public 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.GENERAL_PUNCTUATION  
 
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION  
 
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  
 
            return true;  
 
        }  
 
        return false;  
 
    }  
 
 
 
    public static void isChinese(String strName) {  
 
        char[] ch = strName.toCharArray();  
 
        for (int i = 0; i < ch.length; i++) {  
 
            char c = ch[i];  
 
            if (isChinese(c) == true) {  
 
                System.out.println(isChinese(c));  
 
                return;  
 
            } else {  
 
                System.out.println(isChinese(c));  
 
                return;  
 
            }  
 
        }  
 
    }  
 
    public static void main(String[] args) {  
 
        Random r = new Random();  
 
        for(int i=0;i<20;i++)  
 
        System.out.println(r.nextInt(10)+1);  
 
        isChinese("き");  
 
        isChinese("中国");  
 
    }  
 
 
 
}

 

三、http://topic.csdn.net/t/20040512/16/3059368.html

1)JAVA

自己写的珍藏代码:  
  /**  
            *   用getBytes(encoding):返回字符串的一个byte数组  
            *   当b[0]为   63时,应该是转码错误  
            *   A、不乱码的汉字字符串:  
            *   1、encoding用GB2312时,每byte是负数;  
            *   2、encoding用ISO8859_1时,b[i]全是63。  
            *   B、乱码的汉字字符串:  
            *   1、encoding用ISO8859_1时,每byte也是负数;  
            *   2、encoding用GB2312时,b[i]大部分是63。  
            *   C、英文字符串  
            *   1、encoding用ISO8859_1和GB2312时,每byte都大于0;  
            *   <p/>  
            *   总结:给定一个字符串,用getBytes("iso8859_1")  
            *   1、如果b[i]有63,不用转码;   A-2  
            *   2、如果b[i]全大于0,那么为英文字符串,不用转码;   B-1  
            *   3、如果b[i]有小于0的,那么已经乱码,要转码。   C-1  
            */  
          private   static   String   toGb2312(String   str)   {  
                  if   (str   ==   null)   return   null;  
                  String   retStr   =   str;  
                  byte   b[];  
                  try   {  
                          b   =   str.getBytes("ISO8859_1");  
   
                          for   (int   i   =   0;   i   <   b.length;   i++)   {  
                                  byte   b1   =   b[i];  
                                  if   (b1   ==   63)  
                                          break;     //1  
                                  else   if   (b1   >   0)  
                                          continue;//2  
                                  else   if   (b1   <   0)   {         //不可能为0,0为字符串结束符  
                                          retStr   =   new   String(b,   "GB2312");  
                                          break;  
                                  }  
                          }  
                  }   catch   (UnsupportedEncodingException   e)   {  
                          //   e.printStackTrace();     //To   change   body   of   catch   statement   use   File   |   Settings   |   File   Templates.  
                  }  
                  return   retStr;  
          }

 

2)JS

用javascript不是很好解决吗?  
  <script   language="JavaScript">  
  if   (/[^\x00-\xff]/g.test(this.value))   {  
      alert('为汉字!');  
  }else{  
      alert('非汉字!');  
  }  
  </script>

3)、思路:首先判断一个字节的asc码,如果大于127,则判断紧接着的下一个字节,如果还大于127,则这两个字节就是一个汉字(未验证)

分享到:
评论

相关推荐

    详细华为面试题及答案

    从给定的文件标题“详细华为面试题及答案”及其描述和部分内客来看,这份文档主要涵盖了华为面试中常见的编程和技术性问题,对于准备应聘华为或其他IT公司的求职者而言,是一个宝贵的资源。下面,我们将从这些信息中...

    js面试题面试题面试题

    根据给定的文件信息,以下是对每一道JS面试题的知识点进行详细解析: ### 第一题:编写一个方法求一个字符串的字节长度 #### 解析: 在这道题目中,我们需要编写一个函数来计算字符串的字节长度。这里的重点在于...

    hadoop2面试题 - 2012腾讯笔试的一道算法题.pdf

    ### hadoop2面试题 - 2012腾讯笔试的一道算法题 #### 背景与题目概述 本文档提供了2012年腾讯笔试中一道关于字符串处理的算法题,该题目要求将字符串中的所有大写字母移动到字符串的末尾,同时保持其他字符的相对...

    常见的Java上机面试题

    **代码实现**:参考给出的代码示例,可以看到采用了Java的`Scanner`类读取用户输入,`String`类的`substring`方法分割字符串,以及正则表达式来判断字符类型。通过一个循环遍历字符串中的每个字符,根据字符类型更新...

    百度面试题大全

    【百度面试题大全】涵盖了多个IT领域的知识点,包括数据结构、算法、数据库理论以及市场营销策略。以下是这些知识点的详细说明: 1. **堆和栈的区别**:堆和栈是计算机内存管理的两种基本数据结构。栈是后进先出...

    Java 面试题 Java 面试题

    根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...

    Golang 面试题汇编

    记一道字节跳动的算法面试题 多协程查询切片问题 对已经关闭的的chan进行读写,会怎么样?为什么? 简单聊聊内存逃逸? 字符串转成byte数组,会发生内存拷贝吗? http包的内存泄漏 sync.Map 的用法 Golang 理论 Go...

    golang面试题集合.zip

    记一道字节跳动的算法面试题 多协程查询切片问题 对已经关闭的的chan进行读写,会怎么样?为什么? 简单聊聊内存逃逸? 字符串转成byte数组,会发生内存拷贝吗? http包的内存泄漏 sync.Map 的用法 Golang 理论 Go...

    一道经典的C面试题+答案.pdf

    这篇资料主要涵盖的是C语言和C++编程面试中的一些常见问题和知识点,包括变量类型比较、内存管理、预处理器指令、常量与const的使用、C++调用C语言函数的注意事项以及循环优化等。 首先,针对C语言中的BOOL、float...

    讲座资料(2021年-2022年收藏的常见的Java上机面试题.doc

    以下是一道典型的字符串截取面试题: **面试题1:怎样截取字符串** 该题要求编写一个函数,根据输入的字节数截取字符串,同时保证汉字不被分割。这个问题的关键在于理解Java中字符编码,尤其是中文字符占两个字节...

    百度面试题大收集算法

    这是一道经典的二维数组处理问题,可以应用Kadane's algorithm进行解决,寻找连续子数组的最大和。对于01矩阵,目标是找到连续的1的最大数量。 6. **判断点分十进制IP合法性**: IP地址是四个0-255之间的数字,用...

    22道数据结构算法面试题.doc

    根据给定文件的信息,我们可以总结出以下数据结构与算法...以上是对文档中提到的几道数据结构和算法面试题的详细解析,每一道题目都给出了具体的代码实现和分析思路,这对于理解这些经典问题及其解决方法具有重要意义。

    CC++程序员应聘常见面试题.docx

    首先,让我们来看一道经典的面试题——手动实现`strcpy`函数。`strcpy`函数是C语言中用于复制字符串的库函数,它的正确实现是衡量一个C/C++程序员基本功的重要指标。题目1中,面试者被要求在有限的内存空间内复制...

    Python 55 道面试题及答案.docx

    在给定的面试题中,有一道题目涉及数组中没有重复值的和。这里展示了两种解决方案:`func` 和 `func2`。`func` 函数通过遍历列表,使用两个辅助列表 `lis1`(用于存储不重复的元素)和 `del_lis`(存储已重复的元素...

    C/C++程序员应聘常见面试题深入剖析

    《C/C++程序员应聘常见面试题深入剖析》 在C/C++编程领域,面试往往是对开发者基础技能和问题解决能力的直接检验。一道看似简单的题目,如要求编写一个`strcpy`函数,实则是对程序员对内存管理、字符串处理以及安全...

    C++程序设计员应聘常见面试试题深入剖析

    首先,我们来看一道经典面试题——编写一个`strcpy`函数。这看似简单,但实则要求面试者对内存管理、字符串处理和边界条件有深入理解。在题目1中,由于`string`的长度只有10,而`str1`包含了11个字符(包括末尾的`\0...

    算法经典面试题

    算法经典面试题是IT面试中常见的部分,涉及到的数据结构和算法知识广泛,涵盖字符串处理、哈希表、排序、查找、动态规划等多个方面。以下是对这些面试题的详细解释: 1. **时针分针重合问题**: 这是一道关于时间...

    Java程序员面试题

    以下是对这些面试题的详细解析: 1. 题目涉及到字符串是不可变对象的概念。在`changeStr`方法中,虽然将传入的`str`变量赋值为"welcome",但因为Java中的字符串是不可变的,实际的`str`引用并没有改变,它仍然指向...

    企业数据结构与算法面试题

    - 问题3至9涉及到链表反转、字符串操作、字符串匹配、数组排序等,这些都可以用经典的算法如双指针、回溯、动态规划、贪心策略、哈希映射等方法解决。 以上问题体现了数据结构(如栈、队列、树、链表、数组)和...

Global site tag (gtag.js) - Google Analytics