题目: 编写一个截取字符串的方法,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
提示:中文由两个字节组成,这两个字节均为负数。
只判断中文字符 和英文字符的。
中文为2个字节 英文为1个字节。
我的代码如下,不对哦
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args)
{
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
for(int i=0;i<j;i++)
{
char lastly=inputString.charAt(i);
StringBuffer aa=new StringBuffer("");
if(lastly<65&&lastly>125)
{
aa.append(lastly);
j--;
}else{
aa.append(lastly);
}
System.out.print(aa.toString());
}
}请高手将错误具体的列出来下,让我也学学 多谢了。
提示:中文由两个字节组成,这两个字节均为负数。
只判断中文字符 和英文字符的。
中文为2个字节 英文为1个字节。
我的代码如下,不对哦
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args)
{
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
for(int i=0;i<j;i++)
{
char lastly=inputString.charAt(i);
StringBuffer aa=new StringBuffer("");
if(lastly<65&&lastly>125)
{
aa.append(lastly);
j--;
}else{
aa.append(lastly);
}
System.out.print(aa.toString());
}
}请高手将错误具体的列出来下,让我也学学 多谢了。
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa = new StringBuffer();
for(int i=0;i<j;i++) {
char lastly=inputString.charAt(i);
aa.append(lastly);
}
System.out.print(aa.toString());
}
}这是我改后的,和你对比一下!
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
//aa的申明放到外面,否则后面打印的时候就超出了aa的作用域
StringBuffer aa=new StringBuffer("");
for(int i=0;i<j;i++) {
char lastly=inputString.charAt(i);
/*if(lastly<65&&lastly>125)
{
aa.append(lastly);
j--;
}else{
aa.append(lastly);
}*/
//Java中的字符采用Unicode编码,一个字符占两
//个字节,所以不用那么麻烦,直接加入就行了
aa.append(lastly);
}//这里缺了个括号
System.out.print(aa.toString());
}
}
String str = "我ABC汉DEF";
System.out.println(truncate(str, 6));
} public static String truncate(String str, int length) {
if((str == null) || (str.length() == 0) || (length < 0)) {
return str;
}
char[] chs = str.toCharArray();
int len = 0;
int offset = 0;
for(int i = 0; i < chs.length; i++, offset++) {
len += (chs[i] > 0xff) ? 2 : 1;
if(len > length) {
break;
}
}
if(offset == chs.length) {
return str;
}
return new String(chs, 0, offset);
}
}
我修改下了 但是依然有错误,希望哪个改下。
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args)
{
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa=new StringBuffer("");
for(int i=0;i<inputString.length();i++)
{
char bb=aa.charAt(i);
if(bb<0&&j>1)
{
aa.append(bb);
j=j-2;
}else if(j>0)
{
aa.append(bb);
j--;
}
}
System.out.print(aa.toString());
}
}
public class Demo2 {
public static void main(String[] args) throws Exception {
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa=new StringBuffer("");
byte[] b = inputString.getBytes("gb2312");//得到特定编码的字节数组
byte[] temp = new byte[2];//申明一个字节数组,用来保存取出的每一个字符,一个汉字两个,字母为一个
for(int i=0;i<j;i++) {
temp[0] = (byte)b[i];
if(temp[0] < 0) {//是汉字,两个字节生成一个新的字符串
temp[1] = (byte)b[++i];
aa.append(new String(temp));
continue;
}
//否则非汉字,转换为字符
aa.append((char)temp[0]);
}
System.out.print(aa.toString());
}
}
at java.lang.StringBuffer.charAt(Unknown Source)
at Demo2.main(Demo2.java:17)
at java.lang.StringBuffer.charAt(Unknown Source)
at Demo2.main(Demo2.java:17)
aa什么都没有
for(int i=0;i<inputString.length();i++){
char bb=aa.charAt(i); //这里你取字符?肯定取不到。
我觉得很好取 但是就有个错误
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args)
{
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa=new StringBuffer(inputString);
for(int i=0;i<inputString.length();i++)
{
char bb=aa.charAt(i);
if(bb>255&&j>1)
{
System.out.print(bb);
j=j-2;
}else if(j>0&&bb<255)
{
System.out.print(bb);
j--;
}
} }
}
但是我想用 aa.append方法输出 该怎么修改啊
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args)
{
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa=new StringBuffer(inputString);
for(int i=0;i<inputString.length();i++)
{
char bb=aa.charAt(i);
if(bb>255&&j>1)
{
System.out.print(bb);
j=j-2;
}else if(j>0&&bb<255)
{
System.out.print(bb);
j--;
}
} }
}
但是我想用 aa.append方法输出 该怎么修改啊
for(int i=0;i<inputString.length();i++)
{
char bb=inputString.charAt(i);
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
System.out.println("请输入字符串");
Scanner input=new Scanner(System.in);
String inputString=input.next();
System.out.println("请输入截取字节:");
int j=input.nextInt();
StringBuffer aa=new StringBuffer(); //用aa来保存结果
for(int i=0;i<inputString.length();i++) {
char bb=inputString.charAt(i); //这里用inputString就行了
if(bb>255&&j>1) {
aa.append(bb);
j=j-2;
}else if(j>0&&bb<255) {
aa.append(bb);
j--;
}
}
System.out.println(aa.toString());
}
}
System.out.println(Integer.toBinaryString(bb) );
看看中文与英文有什么样的不同。
我记得ASCII本身用到的只有7位
中文的第一个,应该是个1
时间比较久远,记不太清了。