目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
- package com.sw.suanfa.first.ten;
-
-
-
-
-
-
-
-
-
-
-
-
-
public class SubStringWithChina {
public static void main(String[] args) throws Exception{
String a = "我ABC汉DEF" ;
int len = 6 ;
String encoding = "UTF-8" ;
System.out.println( getSubString(a, len,encoding) );
a = "我ABC";
len = 4 ;
encoding = "gbk" ;
System.out.println( getSubString(a, len,encoding) );
}
/**
*
* @param str 传入字符串
* @param len 截取字节数
* @param encoding 编码方式
* @return 返回截取后的字符串
* @throws Exception
*/
public static String getSubString(String str,int len,String encoding) throws Exception{
if(str == null || str.length()<1) return null ;
if(len<1) return null ;
StringBuffer sb = new StringBuffer();
int all = 0 ;
for(int i=0;i<str.length();i++){
String tmp = str.substring(i,i+1);
sb.append(tmp);
byte[] tmpB = tmp.getBytes(encoding);
all +=tmpB.length ;
if(all>=len){
break ;
}
}
return sb.toString() ;
}
}
-
判断字符串中是否含有汉字:
String str = "test中文汉字";
String regEx = "[\\u4e00-\\u9fa5]";
/**
* 判断有没有中文
*/
if (str.getBytes().length == str.length()) {
System.out.println("无汉字");
} else {
System.out.println("有汉字");
}
/**
* 如果有则打印出来
*/
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.print(m.group(0) + "");
}
如题
1 public static void main(String[] args) {
2 // TODO Auto-generated method stub
3 System.out.println("请输入要断开的字符第几位:");
4 Scanner input=new Scanner(System.in);
5 int len=input.nextInt();
6
7 //判断字符是否为中文
8 String str = "sdf中国chinese对方";
9 byte[] strs=str.getBytes();
10 if(str.substring(len-1, len).matches("[\u4e00-\u9fa5]+")&&strs.length%2==0) {
11
12 // for (int i = 0; i < str.length(); i++) {
13 // if (str.substring(i, i + 1).matches("[\u4e00-\u9fa5]+")) {
14 // System.out.println(""+str.substring(i, i + 1)+""+"为汉字");
15 // }else{
16 // System.out.println(""+str.substring(i, i + 1)+""+"不为汉字");
17 // }
18 // }
19 System.out.println(str.substring(0, len-1));
20 }else{
21 System.out.println(str.substring(0,len-2));
22 }
23
24 }