public Stirng cutString(String str,int count){ byte[] bytes=str.getbytes(); char[] chars=new String(bytes,0,count).toCharArray; char[] chars2=new String(bytes,0,count+1).toCharArray;if(chars.length==chars2.length) return new String(str,0,subString(count-1)); else return new String(str,0,subString(count)); }
public static void main(String args[]){ String s = "我爱abc你"; byte[] b = s.getBytes(); int n = 5; //这个假设为输入的数字 byte[] bb = new byte[n]; for(int j = 0;j<n;j++){ bb[j]=b[j]; } String ss = new String(bb); System.out.println(ss); }
public class myclass { public static void main(String[] argvs){ String mychar = "abc我" ; int myint = 5;//默认值 myclass own = new myclass(); own.prints(mychar,myint); } public void prints(String str,int temp){ byte[] mybyte = str.getBytes();
System.out.println("喊a的ss".substring(0,2));
System.out.println("喊a的ss".substring(0,3));
System.out.println("喊a的ss".substring(0,4));
直接截取就好了
喊a
喊a的
喊a的s
而题目要求是输出
喊
喊a
喊a
喊
喊a
喊a的
喊a的s
而题目要求是输出
?
喊
喊a
喊a
判断
int reInt = 0;
String reStr = "";
if (str == null)
return "";
char[] tempChar = str.toCharArray();
for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
String s1 = str.valueOf(tempChar[kk]);
byte[] b = s1.getBytes();
reInt += b.length;
reStr += tempChar[kk];
}
return reStr;
}
public class Test2{
public String substring(String str, int toCount) {
int reInt = 0;
String reStr = "";
if (str == null)
return "";
char[] tempChar = str.toCharArray();
for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
String s1 = str.valueOf(tempChar[kk]);
byte[] b = s1.getBytes();
reInt += b.length;
reStr += tempChar[kk];
}
return reStr;
} public static void main(String[] arg){
Test2 t =new Test2();
System.out.println(t.substring("test我dd",4));
System.out.println(t.substring("test我dd",5));
}
}打印出 test
test我
并没有解决汉字编码问题
我觉得应该有一个判断汉字的语句
byte[] ss=stest.getBytes();
for(int i=0;i<ss.length;i++)
System.out.println(""+i+":"+ss[i]);
可以看见汉字占2个字节,而且高位是1,打出来是负的,判断下就ok了
很多人都是用substring 方法 但是并没有符合题目要求啊
汉字的unicode范围是多少啊?
* @param args
*/
public static String subString(String str,int count)
{
byte []nstr=new byte[count];
byte[] ss=str.getBytes();
for(int i=0;i<count;i++)
{
if(ss[i]<0&&(i+1)<count)
{
nstr[i]=ss[i];
nstr[i+1]=ss[i+1];
i=i+1;
}
else
if(ss[i]<0&&(i+1)>count)
{i=i+1;}
if(ss[i]>0)
{nstr[i]=ss[i];}
}
return new String(nstr);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println(StringTest.subString("hoho我爱玩龙族hoho",13));
}}结果:hoho我爱玩龙
byte[] bytes=str.getbytes();
char[] chars=new String(bytes,0,count).toCharArray;
char[] chars2=new String(bytes,0,count+1).toCharArray;if(chars.length==chars2.length)
return new String(str,0,subString(count-1));
else
return new String(str,0,subString(count));
}
String s = "我爱abc你";
byte[] b = s.getBytes(); int n = 5; //这个假设为输入的数字
byte[] bb = new byte[n];
for(int j = 0;j<n;j++){
bb[j]=b[j];
}
String ss = new String(bb);
System.out.println(ss);
}
if(length>args.length())
length=args.length();
String rPut="";
byte[] b=args.getBytes();
if(length/2!=0){
if(b[length]<0)
length=length-1;
}
rPut=new String(b,0,length);
return rPut;
}
public static void main(String[] argvs){
String mychar = "abc我" ;
int myint = 5;//默认值
myclass own = new myclass();
own.prints(mychar,myint);
}
public void prints(String str,int temp){
byte[] mybyte = str.getBytes();
if(temp > mybyte.length){
System.out.print(str);
return;
}
byte[] tempbyte = new byte[temp];
int i=0;
for( ; i < temp-1 ; i++){
tempbyte[i] = mybyte[i];
}
if(mybyte[i]>=0){
tempbyte[i]=mybyte[i];
}
else if(mybyte[i-1]<0){
tempbyte[i]=mybyte[i];
}
System.out.println(new String(tempbyte));
}
}汉字的两个字节都是负数
byte[] temp=s.getBytes();
byte[] subString=new byte[n];
int k=0;
for(int i=0;i<n;i++){
if(temp[i]<0&&i+1==n){
for(int j=i+1;j>0;j--){
if(temp[j]<0)
k++;
else
break;
}
System.out.println(k);
if(k%2==0)
subString[i]=temp[i];
}
else
subString[i]=temp[i];
}
return new String(subString).trim();
}
public static void main(String[] args){
System.out.println(checkString("你好aaa哈",1));
System.out.println(checkString("你好aaa哈",1));