一个可以截取包含中英文的字符串的函数
2014-02-11 21:22
239 查看
保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
汉字算两个字节,字母算一个字节
public static boolean isLetter(char c) { //可以判断是否为汉字
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null) {
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
另外写啦一个测试isLetter()的方法
public class TestString {
public static boolean isLetter(char c) {
int k=0X80;
System.out.println(c/k);
return c/k==0?true:false;
}
public static void main(String[] args) {
String s="w实得分ws是否ds的a";
for(int i=0;i<s.length();i++){
isLetter(s.toCharArray()[i]);
}
}
}
输出结果为:
0
183
191
164
0
0
204
168
0
0
237
0
只有是汉字时c/k就会大于0
汉字算两个字节,字母算一个字节
public static boolean isLetter(char c) { //可以判断是否为汉字
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null) {
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
另外写啦一个测试isLetter()的方法
public class TestString {
public static boolean isLetter(char c) {
int k=0X80;
System.out.println(c/k);
return c/k==0?true:false;
}
public static void main(String[] args) {
String s="w实得分ws是否ds的a";
for(int i=0;i<s.length();i++){
isLetter(s.toCharArray()[i]);
}
}
}
输出结果为:
0
183
191
164
0
0
204
168
0
0
237
0
只有是汉字时c/k就会大于0
相关文章推荐
- Thinkphp内置的一个中英文字符串截取函数,显示省略号
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 包含中英文的字符串截取算法,与php系统字符串截取函数
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- Thinkphp内置的一个中英文字符串截取函数,显示省略号
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 介绍Thinkphp内置的一个中英文字符串截取函数
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
- 写一个函数可以左旋转字符串的k个字符
- 编写一个截取字符串的函数
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 一个案例讲解获取字符串长度的函数mb_strlen()和字符串截取函数mb_substr()
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我A
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”(转)
- 一个很实用的字符串截取函数
- 字符串包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数