一、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面试题的知识点进行详细解析: ### 第一题:编写一个方法求一个字符串的字节长度 #### 解析: 在这道题目中,我们需要编写一个函数来计算字符串的字节长度。这里的重点在于...
### hadoop2面试题 - 2012腾讯笔试的一道算法题 #### 背景与题目概述 本文档提供了2012年腾讯笔试中一道关于字符串处理的算法题,该题目要求将字符串中的所有大写字母移动到字符串的末尾,同时保持其他字符的相对...
**代码实现**:参考给出的代码示例,可以看到采用了Java的`Scanner`类读取用户输入,`String`类的`substring`方法分割字符串,以及正则表达式来判断字符类型。通过一个循环遍历字符串中的每个字符,根据字符类型更新...
【百度面试题大全】涵盖了多个IT领域的知识点,包括数据结构、算法、数据库理论以及市场营销策略。以下是这些知识点的详细说明: 1. **堆和栈的区别**:堆和栈是计算机内存管理的两种基本数据结构。栈是后进先出...
根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...
记一道字节跳动的算法面试题 多协程查询切片问题 对已经关闭的的chan进行读写,会怎么样?为什么? 简单聊聊内存逃逸? 字符串转成byte数组,会发生内存拷贝吗? http包的内存泄漏 sync.Map 的用法 Golang 理论 Go...
记一道字节跳动的算法面试题 多协程查询切片问题 对已经关闭的的chan进行读写,会怎么样?为什么? 简单聊聊内存逃逸? 字符串转成byte数组,会发生内存拷贝吗? http包的内存泄漏 sync.Map 的用法 Golang 理论 Go...
这篇资料主要涵盖的是C语言和C++编程面试中的一些常见问题和知识点,包括变量类型比较、内存管理、预处理器指令、常量与const的使用、C++调用C语言函数的注意事项以及循环优化等。 首先,针对C语言中的BOOL、float...
以下是一道典型的字符串截取面试题: **面试题1:怎样截取字符串** 该题要求编写一个函数,根据输入的字节数截取字符串,同时保证汉字不被分割。这个问题的关键在于理解Java中字符编码,尤其是中文字符占两个字节...
这是一道经典的二维数组处理问题,可以应用Kadane's algorithm进行解决,寻找连续子数组的最大和。对于01矩阵,目标是找到连续的1的最大数量。 6. **判断点分十进制IP合法性**: IP地址是四个0-255之间的数字,用...
根据给定文件的信息,我们可以总结出以下数据结构与算法...以上是对文档中提到的几道数据结构和算法面试题的详细解析,每一道题目都给出了具体的代码实现和分析思路,这对于理解这些经典问题及其解决方法具有重要意义。
首先,让我们来看一道经典的面试题——手动实现`strcpy`函数。`strcpy`函数是C语言中用于复制字符串的库函数,它的正确实现是衡量一个C/C++程序员基本功的重要指标。题目1中,面试者被要求在有限的内存空间内复制...
在给定的面试题中,有一道题目涉及数组中没有重复值的和。这里展示了两种解决方案:`func` 和 `func2`。`func` 函数通过遍历列表,使用两个辅助列表 `lis1`(用于存储不重复的元素)和 `del_lis`(存储已重复的元素...
《C/C++程序员应聘常见面试题深入剖析》 在C/C++编程领域,面试往往是对开发者基础技能和问题解决能力的直接检验。一道看似简单的题目,如要求编写一个`strcpy`函数,实则是对程序员对内存管理、字符串处理以及安全...
首先,我们来看一道经典面试题——编写一个`strcpy`函数。这看似简单,但实则要求面试者对内存管理、字符串处理和边界条件有深入理解。在题目1中,由于`string`的长度只有10,而`str1`包含了11个字符(包括末尾的`\0...
算法经典面试题是IT面试中常见的部分,涉及到的数据结构和算法知识广泛,涵盖字符串处理、哈希表、排序、查找、动态规划等多个方面。以下是对这些面试题的详细解释: 1. **时针分针重合问题**: 这是一道关于时间...
以下是对这些面试题的详细解析: 1. 题目涉及到字符串是不可变对象的概念。在`changeStr`方法中,虽然将传入的`str`变量赋值为"welcome",但因为Java中的字符串是不可变的,实际的`str`引用并没有改变,它仍然指向...
- 问题3至9涉及到链表反转、字符串操作、字符串匹配、数组排序等,这些都可以用经典的算法如双指针、回溯、动态规划、贪心策略、哈希映射等方法解决。 以上问题体现了数据结构(如栈、队列、树、链表、数组)和...